فهرست منبع

fix misaligned read on early string termination in strchr

this could actually cause rare crashes in the case where a short
string is located at the end of a page and the following page is not
readable, and in fact this was seen in gcc compiling certain files.
Rich Felker 14 سال پیش
والد
کامیت
16675df793
1فایلهای تغییر یافته به همراه2 افزوده شده و 1 حذف شده
  1. 2 1
      src/string/strchr.c

+ 2 - 1
src/string/strchr.c

@@ -15,8 +15,9 @@ char *strchr(const char *s, int c)
 	c = (unsigned char)c;
 	if (!c) return (char *)s + strlen(s);
 
-	for (; ((uintptr_t)s & ALIGN) && *s; s++)
+	for (; ((uintptr_t)s & ALIGN); s++)
 		if (*(unsigned char *)s == c) return (char *)s;
+		else if (!*s) return 0;
 	k = ONES * c;
 	for (w = (void *)s; !HASZERO(*w) && !HASZERO(*w^k); w++);
 	for (s = (void *)w; *s; s++)