diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-08-23 12:10:16 +0200 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-08-23 12:10:16 +0200 |
commit | 029a8db2701afb0653c6e789c878bb768ceb87e1 (patch) | |
tree | 86b1c8406d6c7755d19017d98406177660403f54 /lib/sqfs/read_table.c | |
parent | 7c028e224978e1d5a4f207cc42b9eb58d81897dd (diff) |
Do bounds checking in metadata reader
In all cases where metadata blocks are read, we can roughly (in some
cases even preciesly) say in what range those metadata blocks will be,
so it makes sense to throw an error if an attempt is made to wander
outside this range.
Furthermore, when reading from an uncompressed block, it is more reasonable
to check against the actual block bounds than to padd it with 0 bytes.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/sqfs/read_table.c')
-rw-r--r-- | lib/sqfs/read_table.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/sqfs/read_table.c b/lib/sqfs/read_table.c index 12e06b4..6efd401 100644 --- a/lib/sqfs/read_table.c +++ b/lib/sqfs/read_table.c @@ -15,7 +15,8 @@ #include <stdio.h> void *sqfs_read_table(int fd, compressor_t *cmp, size_t table_size, - uint64_t location) + uint64_t location, uint64_t lower_limit, + uint64_t upper_limit) { size_t diff, block_count, list_size, blk_idx = 0; uint64_t start, *locations; @@ -48,7 +49,7 @@ void *sqfs_read_table(int fd, compressor_t *cmp, size_t table_size, } /* Read the actual data */ - m = meta_reader_create(fd, cmp); + m = meta_reader_create(fd, cmp, lower_limit, upper_limit); if (m == NULL) goto fail_idx; |