]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
http2: convert an assert to run-time check
authorDaniel Stenberg <daniel@haxx.se>
Sat, 21 Apr 2018 10:33:52 +0000 (12:33 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 23 Apr 2018 11:51:32 +0000 (13:51 +0200)
Fuzzing has proven we can reach code in on_frame_recv with status_code
not having been set, so let's detect that in run-time (instead of with
assert) and error error accordingly.

(This should no longer happen with the latest nghttp2)

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

lib/http2.c

index fe5fdb1b829f03af04021910c5612b8390f05654..7dea16125e7ba23f369546ea012afdea370f3df0 100644 (file)
@@ -624,8 +624,10 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
     }
 
     /* nghttp2 guarantees that :status is received, and we store it to
-       stream->status_code */
-    DEBUGASSERT(stream->status_code != -1);
+       stream->status_code. Fuzzing has proven this can still be reached
+       without status code having been set. */
+    if(stream->status_code == -1)
+      return NGHTTP2_ERR_CALLBACK_FAILURE;
 
     /* Only final status code signals the end of header */
     if(stream->status_code / 100 != 1) {