When utf8_width(&src) is called with *src == NULL (because the source string ends with an ansi sequence), it returns 0 and steps 'src' by one. This stepping makes strbuf_utf8_replace add NUL to the destination string at the end of the loop. Check and break the loop early. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- utf8.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/utf8.c b/utf8.c index b30790d..cd090a1 100644 --- a/utf8.c +++ b/utf8.c @@ -381,6 +381,8 @@ void strbuf_utf8_replace(struct strbuf *sb_src, int pos, int width, src += n; dst += n; } + if (src >= end) + break; old = src; n = utf8_width((const char**)&src, NULL); -- 2.1.0.rc0.66.gb9187ad -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html