From dbf26257f1283ef73eb1e9fe29ba69df0bfc589d Mon Sep 17 00:00:00 2001 From: Alexander Kabaev Date: Sat, 13 Jun 2015 15:14:39 +0000 Subject: [PATCH] Unbreak libxo's handling of characters not representable in current locale The xo_format_string_direct function loops forever never advancing the processed string pointer when it encounters a character that makes mbrtowc fail. Make it emit '?' character instead, as it seems this is what the code intent was, sans bugs. Differential Revision: https://reviews.freebsd.org/D2802 Reviewed by: marcel --- contrib/libxo/libxo/libxo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contrib/libxo/libxo/libxo.c b/contrib/libxo/libxo/libxo.c index 4fd18fd01bb4..bb4ce2e7e8af 100644 --- a/contrib/libxo/libxo/libxo.c +++ b/contrib/libxo/libxo/libxo.c @@ -2077,7 +2077,8 @@ xo_format_string_direct (xo_handle_t *xop, xo_buffer_t *xbp, ilen = mbrtowc(&wc, cp, ilen, &xop->xo_mbstate); if (ilen < 0) { /* Invalid data; skip */ xo_failure(xop, "invalid mbs char: %02hhx", *cp); - continue; + wc = L'?'; + ilen = 1; } if (ilen == 0) { /* Hit a wide NUL character */ len = 0;