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.
43 lines
1.0 KiB
43 lines
1.0 KiB
1 year ago
|
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
|