From d4e8205f1f09d05c87be0eaa54185aeb7c117d72 Mon Sep 17 00:00:00 2001 From: Michihiro NAKAJIMA Date: Sun, 7 Oct 2012 11:03:48 +0900 Subject: [PATCH] Fix a long standing bug that archive_write_add_filter_program incorrectly handles the return value of __archive_write_filter(). --- libarchive/archive_write_add_filter_program.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) 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; } } -- 2.47.2