From: Michihiro NAKAJIMA Date: Sun, 7 Oct 2012 02:03:48 +0000 (+0900) Subject: Fix a long standing bug that archive_write_add_filter_program X-Git-Tag: v3.1.0~40^2~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d4e8205f1f09d05c87be0eaa54185aeb7c117d72;p=thirdparty%2Flibarchive.git Fix a long standing bug that archive_write_add_filter_program incorrectly handles the return value of __archive_write_filter(). --- diff --git a/libarchive/archive_write_add_filter_program.c b/libarchive/archive_write_add_filter_program.c index 149a211b6..3dda6bae0 100644 --- a/libarchive/archive_write_add_filter_program.c +++ b/libarchive/archive_write_add_filter_program.c @@ -344,14 +344,9 @@ child_write(struct archive_write_filter *f, const char *buf, size_t buf_len) ret = __archive_write_filter(f->next_filter, data->child_buf, data->child_buf_avail); - if (ret <= 0) + if (ret != ARCHIVE_OK) return (-1); - - if ((size_t)ret < data->child_buf_avail) { - memmove(data->child_buf, data->child_buf + ret, - data->child_buf_avail - ret); - } - data->child_buf_avail -= ret; + data->child_buf_avail = 0; } }