If a pipe write fails and errno is set to EPIPE then we execute the "error" path. However, as "err" can still be 0 the return value of apply_multi_file_filter() would indicate success. Fix this by setting "err" to the value of "errno" in case of a pipe write failure. Noticed-by: Ben Peart <benpeart@xxxxxxxxxxxxx> Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx> --- Notes: Base Ref: master Web-Diff: https://github.com/larsxschneider/git/commit/41a217c246 Checkout: git fetch https://github.com/larsxschneider/git errno-check-v1 && git checkout 41a217c246 convert.c | 1 + 1 file changed, 1 insertion(+) diff --git a/convert.c b/convert.c index 8d652bf27c..586e0cdd45 100644 --- a/convert.c +++ b/convert.c @@ -753,6 +753,7 @@ static int apply_multi_file_filter(const char *path, const char *src, size_t len sigchain_pop(SIGPIPE); if (err || errno == EPIPE) { + err = err ? err : errno; if (!strcmp(filter_status.buf, "error")) { /* The filter signaled a problem with the file. */ } else if (!strcmp(filter_status.buf, "abort")) { base-commit: b14f27f91770e0f99f64135348977a0ce1c7993a -- 2.12.2