You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.0 KiB
42 lines
1.0 KiB
From 78556fc13026220f800384accf04e139f11e099a Mon Sep 17 00:00:00 2001 |
|
From: Joan Bruguera <joanbrugueram@gmail.com> |
|
Date: Thu, 17 Feb 2022 22:27:34 +0100 |
|
Subject: [PATCH] Workaround mbsrtowcs fortify crash in GLIBC 2.35 |
|
|
|
Reproduces with: |
|
gcc -O2 -Wp,-D_FORTIFY_SOURCE=2 test.c -o test && ./test |
|
|
|
And test.c: |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <wchar.h> |
|
|
|
int main (void) |
|
{ |
|
const char *hw = "HelloWorld"; |
|
mbstate_t ps = {0}; |
|
mbsrtowcs (NULL, &hw, (size_t)-1, &ps); |
|
return 0; |
|
} |
|
|
|
Output: |
|
*** buffer overflow detected ***: terminated |
|
--- |
|
utf8.c | 2 +- |
|
1 file changed, 1 insertion(+), 1 deletion(-) |
|
|
|
diff --git a/utf8.c b/utf8.c |
|
index 2db18f2..806d528 100644 |
|
--- a/utf8.c |
|
+++ b/utf8.c |
|
@@ -167,7 +167,7 @@ static size_t xmbstowcs (wchar_t *dest, const char *src, size_t len, |
|
while (src && (len || !dest)) { |
|
size_t res; |
|
|
|
- res = mbsrtowcs (dest, &src, len, &ps); |
|
+ res = mbsrtowcs (dest, &src, dest ? len : 0, &ps); |
|
if (res != (size_t)-1) { |
|
count += res; |
|
src = NULL; |
|
-- |
|
2.35.1
|
|
|