]> granicus.if.org Git - curl/commitdiff
http2: avoid strstr() on data not zero terminated
authorDaniel Stenberg <daniel@haxx.se>
Fri, 20 Apr 2018 14:32:46 +0000 (16:32 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Fri, 20 Apr 2018 20:16:50 +0000 (22:16 +0200)
It's not strictly clear if the API contract allows us to call strstr()
on a string that isn't zero terminated even when we know it will find
the substring, and clang's ASAN check dislikes us for it.

Also added a check of the return code in case it fails, even if I can't
think of a situation how that can trigger.

Detected by OSS-Fuzz
Closes #2513
Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7760

lib/http2.c

index e60ae247b484bc04859562439981910a1acff52f..077c03e6febcbef2b4b6b127284299801993ae9d 100644 (file)
@@ -1851,8 +1851,11 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
     return -1;
   }
 
-  /* Extract :method, :path from request line */
-  line_end = strstr(hdbuf, "\r\n");
+  /* Extract :method, :path from request line
+     We do line endings with CRLF so checking for CR is enough */
+  line_end = memchr(hdbuf, '\r', len);
+  if(!line_end)
+    goto fail;
 
   /* Method does not contain spaces */
   end = memchr(hdbuf, ' ', line_end - hdbuf);