_alpm_archive_fgets(): bail early if reached end of block
Bailing early when there are 0 blocks remaining means that we do not call memchr on a NULL string (although with a 0 size parameter). Fixes issues reported using -fsanitise=address,undefined Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
parent
936eff63bf
commit
4dc21b965b
@ -1227,6 +1227,14 @@ int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b)
|
||||
b->block_offset = b->block;
|
||||
block_remaining = b->block_size;
|
||||
|
||||
if(block_remaining == 0) {
|
||||
/* there was no new data, return what is left; ARCHIVE_EOF will be
|
||||
* returned on next call */
|
||||
b->line_offset[0] = '\0';
|
||||
b->real_line_size = b->line_offset - b->line;
|
||||
return ARCHIVE_OK;
|
||||
}
|
||||
|
||||
/* error, cleanup */
|
||||
if(b->ret < ARCHIVE_OK) {
|
||||
goto cleanup;
|
||||
@ -1282,13 +1290,6 @@ int _alpm_archive_fgets(struct archive *a, struct archive_read_buffer *b)
|
||||
memcpy(b->line_offset, b->block_offset, len);
|
||||
b->line_offset += len;
|
||||
b->block_offset = b->block + b->block_size;
|
||||
/* there was no new data, return what is left; saved ARCHIVE_EOF will be
|
||||
* returned on next call */
|
||||
if(len == 0) {
|
||||
b->line_offset[0] = '\0';
|
||||
b->real_line_size = b->line_offset - b->line;
|
||||
return ARCHIVE_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user