summaryrefslogtreecommitdiff
path: root/contrib/subtree/todo
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2013-04-15 20:30:38 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2013-04-16 10:13:46 -0700
commitb793acf14ce99a02f04de579233e104d2bc5515e (patch)
treec4106ba16461fa848b8564e24edcb0243182419e /contrib/subtree/todo
parenthttp: drop http_error function (diff)
downloadtgif-b793acf14ce99a02f04de579233e104d2bc5515e.tar.xz
http: set curl FAILONERROR each time we select a handle
Because we reuse curl handles for multiple requests, the setup of a handle happens in two stages: stable, global setup and per-request setup. The lifecycle of a handle is something like: 1. get_curl_handle; do basic global setup that will last through the whole program (e.g., setting the user agent, ssl options, etc) 2. get_active_slot; set up a per-request baseline (e.g., clearing the read/write functions, making it a GET request, etc) 3. perform the request with curl_*_perform functions 4. goto step 2 to perform another request Breaking it down this way means we can avoid doing global setup from step (1) repeatedly, but we still finish step (2) with a predictable baseline setup that callers can rely on. Until commit 6d052d7 (http: add HTTP_KEEP_ERROR option, 2013-04-05), setting curl's FAILONERROR option was a global setup; we never changed it. However, 6d052d7 introduced an option where some requests might turn off FAILONERROR. Later requests using the same handle would have the option unexpectedly turned off, which meant they would not notice http failures at all. This could easily be seen in the test-suite for the "half-auth" cases of t5541 and t5551. The initial requests turned off FAILONERROR, which meant it was erroneously off for the rpc POST. That worked fine for a successful request, but meant that we failed to react properly to the HTTP 401 (instead, we treated whatever the server handed us as a successful message body). The solution is simple: now that FAILONERROR is a per-request setting, we move it to get_active_slot to make sure it is reset for each request. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'contrib/subtree/todo')
0 files changed, 0 insertions, 0 deletions