You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When the nghttp2 callback on_frame_recv() returns error, we now set an
extra "real" return code to pass that value back to return.
This avoids all callback errors sloppily get reported as
CURLE_RECV_ERROR. For example for 4xx responses when CURLOPT_FAILONERROR
is set.
Reported-by: Laramie Leavitt
Fixes#13411
- refs curl#13411
- errors returned by Curl_xfer_write_resp() and the header variant
are not errors in the protocol. The result needs to be returned
on the next recv() from the protocol filter.
- make xfer write errors for response data cause the stream to
be cancelled
- added pytest test_02_14 and test_02_15 to verify that also for
parallel processing
I did this
Created an http/2 request to a missing URL (404) with the following options:
curl_easy_setopt(curl_handle, CURLOPT_FAILONERROR, true)
See expected outcome.
CURLE_HTTP_RETURNED_ERROR
is returned in ~2 places in http.c, which participates in this callstack when processed via
curl_easy_perform
:in http2.c,
on_frame_recv
, the error code lost via a conversion toNGHTTP2_ERR_CALLBACK_FAILURE
This propagates out to
h2_process_pending_input
which then emitsCURLE_RECV_ERROR
The relevant call stack is:
I expected the following
https://curl.se/libcurl/c/CURLOPT_FAILONERROR.html
Actual error code CURLE_RECV_ERROR
Expected the error code CURLE_HTTP_RETURNED_ERROR
curl/libcurl version
curl 8.7.1+
operating system
Debian 6.6.13-1rodete3 (2024-03-04) x86_64 GNU/Linux
Built from source.
The text was updated successfully, but these errors were encountered: