[PATCH 2/2] lib/fold: Catch error case from mbrtowc()

Sam Mendoza-Jonas sam at mendozajonas.com
Thu Mar 3 14:43:11 AEDT 2016


The assert() statement in fold_text() only evaluates in a debug build.
If mbrtowc() encounters an error return the portion of the string that
has been parsed and stop.

This avoids an issue with with glibc 2.22 where previous calls to
setlocale() failed and set an unsuitable locale. Since the error was not
caught this resulted in an infinite loop when trying to access the
Language screen.

Signed-off-by: Sam Mendoza-Jonas <sam at mendozajonas.com>
---
 lib/fold/fold.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/fold/fold.c b/lib/fold/fold.c
index 2566253..812a324 100644
--- a/lib/fold/fold.c
+++ b/lib/fold/fold.c
@@ -36,9 +36,10 @@ void fold_text(const char *text,
 
 		assert(bytes != (size_t)-1);
 
-		/* we'll get a zero size for the nul terminator, or (size_t) -2
-		 * if we've reached the end of the buffer */
-		if (!bytes || bytes == (size_t) -2) {
+		/* we'll get a zero size for the nul terminator, (size_t) -2
+		 * if we've reached the end of the buffer, or (size_t) -1 on
+		 * error */
+		if (!bytes || bytes == (size_t) -2 || bytes == (size_t) -1) {
 			line_cb(arg, start, end - start);
 			break;
 		}
-- 
2.7.2



More information about the Petitboot mailing list