From bbb21b0bad40fb7c9fc9d2b8f4c8b9a0cd12a24a Mon Sep 17 00:00:00 2001 From: Marlies Heijkoop Date: Thu, 14 Aug 2014 20:06:45 +0200 Subject: [PATCH] Don't segfault on invalid utf8 while sorting `strmblen` returns -1 on invalid sequences, which causes a segfault when passed as length to `stpncpy`. --- src/filescanner.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/filescanner.c b/src/filescanner.c index fa4d9b1e..3a23949a 100644 --- a/src/filescanner.c +++ b/src/filescanner.c @@ -184,6 +184,7 @@ sort_tag_create(char **sort_tag, char *src_tag) ucs4_t puc; int numlen; size_t len; + int charlen; /* Note: include terminating NUL in string length for u8_normalize */ @@ -236,7 +237,11 @@ sort_tag_create(char **sort_tag, char *src_tag) if (number) append_number = 1; // A number has ended so time to append it else - o_ptr = u8_stpncpy(o_ptr, i_ptr, u8_strmblen(i_ptr)); // No numbers in sight, just append char + { + charlen = u8_strmblen(i_ptr); + if (charlen >= 0) + o_ptr = u8_stpncpy(o_ptr, i_ptr, charlen); // No numbers in sight, just append char + } } // Break if less than 100 bytes remain (prevent buffer overflow)