File rsync-iconv-segfault.patch of Package rsync.37081

From c0c6a97c35e8e4fb56ba26dc9c8447e26d94de06 Mon Sep 17 00:00:00 2001
From: Wayne Davison <wayned@samba.org>
Date: Sat, 16 Mar 2019 11:49:53 -0700
Subject: [PATCH] Try to fix the iconv crash in bug 11338.

Applying Michal Ruprich's suggested patch for the rwrite() function that
should hopefully help with a bug that I couldn't reproduce.
---
 log.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/log.c b/log.c
index 21bcdfd9..a86edd74 100644
--- a/log.c
+++ b/log.c
@@ -378,10 +378,13 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8)
 				filtered_fwrite(f, convbuf, outbuf.len, 0);
 				outbuf.len = 0;
 			}
-			if (!ierrno || ierrno == E2BIG)
-				continue;
-			fprintf(f, "\\#%03o", CVAL(inbuf.buf, inbuf.pos++));
-			inbuf.len--;
+			/* Log one byte of illegal/incomplete sequence and continue with
+			 * the next character. Check that the buffer is non-empty for the
+			 * sake of robustness. */
+			if ((ierrno == EILSEQ || ierrno == EINVAL) && inbuf.len) {
+				fprintf(f, "\\#%03o", CVAL(inbuf.buf, inbuf.pos++));
+				inbuf.len--;
+			}
 		}
 	} else
 #endif
openSUSE Build Service is sponsored by