This is the mail archive of the
cygwin-patches
mailing list for the Cygwin project.
[PATCH] Fix possible segmentation fault in strnstr() on 64-bit systems
- From: Johannes Schindelin <johannes dot schindelin at gmx dot de>
- To: cygwin-patches at cygwin dot com
- Cc: Sichen Zhao <1473996754 at qq dot com>
- Date: Wed, 13 Sep 2017 17:44:32 +0200 (CEST)
- Subject: [PATCH] Fix possible segmentation fault in strnstr() on 64-bit systems
- Authentication-results: sourceware.org; auth=none
As of f22054c94d (Modify strnstr.c., 2017-08-30), the strnstr()
implementation was replaced by a version that segfaults (at least
sometimes) on 64-bit systems.
The reason: the new implementation uses memmem(), and the prototype of
memmem() is missing because the _GNU_SOURCE constant is not defined
before including <string.h>. As a consequence its return type defaults
to int (and GCC spits out a warning).
On 64-bit systems, the int data type is too small, though, to hold a
full char *, hence the upper 32-bit are cut off and bad things happen
due to a bogus pointer being used to access memory.
Reported as https://github.com/Alexpux/MINGW-packages/issues/2879 in
the MSYS2 project.
Cc: Sichen Zhao <1473996754@qq.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
Published-As: https://github.com/dscho/msys2-runtime/releases/tag/fix-strnstr-segfault-v1
Fetch-It-Via: git fetch https://github.com/dscho/msys2-runtime fix-strnstr-segfault-v1
newlib/libc/string/strnstr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/newlib/libc/string/strnstr.c b/newlib/libc/string/strnstr.c
index ce32d0f73e..f6b007813f 100644
--- a/newlib/libc/string/strnstr.c
+++ b/newlib/libc/string/strnstr.c
@@ -31,6 +31,7 @@ QUICKREF
*/
#undef __STRICT_ANSI__
+#define _GNU_SOURCE
#include <_ansi.h>
#include <string.h>
base-commit: 05cfd1aed8b262e82f62acc2de2858d2d2b6679c
--
2.14.1.windows.1.521.g18481b3d404