From: Tristan Ravitch Date: Fri, 2 Nov 2012 14:49:44 +0000 (-0500) Subject: Fix an error test on the result from fread X-Git-Tag: v3.1.0~39^2~19^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F29%2Fhead;p=thirdparty%2Flibarchive.git Fix an error test on the result from fread fread returns a short byte count on error (and ferror has to be used to determine if it really was an error). There was a check for < 0, which fread cannot return. --- diff --git a/libarchive/archive_read_open_file.c b/libarchive/archive_read_open_file.c index b1aac0a7c..3a33c258e 100644 --- a/libarchive/archive_read_open_file.c +++ b/libarchive/archive_read_open_file.c @@ -108,11 +108,11 @@ static ssize_t file_read(struct archive *a, void *client_data, const void **buff) { struct read_FILE_data *mine = (struct read_FILE_data *)client_data; - ssize_t bytes_read; + size_t bytes_read; *buff = mine->buffer; bytes_read = fread(mine->buffer, 1, mine->block_size, mine->f); - if (bytes_read < 0) { + if (bytes_read < mine->block_size && ferror(mine->f)) { archive_set_error(a, errno, "Error reading file"); } return (bytes_read);