diff options
| author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2021-08-22 13:29:26 +0200 | 
|---|---|---|
| committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2021-08-22 13:45:11 +0200 | 
| commit | 93f17ac5382be1102151fe1322ce90e85665e161 (patch) | |
| tree | a311d9d1fd61d64b095420d91e7dfb1b0950f44b /lib | |
| parent | 11dfe80e867f199bbf40a3bdcffa77b4aa6429f6 (diff) | |
Fix half done initialization of sqfs_dir_reader_open_dir
The sqfs_dir_reader_open_dir function tried to take a short-cut by
returning early if the target directory is empty. However, this left
some field unchanged from the previous directory.
If iterating over a directory and then deciding to enter a sub-directory
that happens to be empty, the directory reader will keep the settings
for the current directory. After calling sqfs_dir_reader_rewind, the
sub-directory will suddenly report the contents of the parent.
A similar check is added to the rewind function to not track back on
the meta data reader in that case.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqfs/dir_reader.c | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/lib/sqfs/dir_reader.c b/lib/sqfs/dir_reader.c index 65962d8..e6467ef 100644 --- a/lib/sqfs/dir_reader.c +++ b/lib/sqfs/dir_reader.c @@ -145,15 +145,15 @@ int sqfs_dir_reader_open_dir(sqfs_dir_reader_t *rd,  	rd->size = size;  	rd->entries = 0; -	if (rd->size <= sizeof(rd->hdr)) -		return 0; -  	block_start += rd->super->directory_table_start;  	rd->dir_block_start = block_start;  	rd->dir_offset = offset;  	rd->start_size = size; +	if (rd->size <= sizeof(rd->hdr)) +		return 0; +  	return sqfs_meta_reader_seek(rd->meta_dir, block_start, offset);  } @@ -200,6 +200,9 @@ int sqfs_dir_reader_rewind(sqfs_dir_reader_t *rd)  	rd->size = rd->start_size;  	rd->entries = 0; +	if (rd->size <= sizeof(rd->hdr)) +		return 0; +  	return sqfs_meta_reader_seek(rd->meta_dir, rd->dir_block_start,  				     rd->dir_offset);  } | 
