diff --git a/Library/Homebrew/utils/curl.rb b/Library/Homebrew/utils/curl.rb index 967e3af7597b9..724b4b0fd6bf9 100644 --- a/Library/Homebrew/utils/curl.rb +++ b/Library/Homebrew/utils/curl.rb @@ -22,6 +22,10 @@ module Curl # code that is >= 400. CURL_HTTP_RETURNED_ERROR_EXIT_CODE = 22 + # Error returned when curl gets an error from the lowest networking layers + # that the receiving of data failed. + CURL_RECV_ERROR_EXIT_CODE = 56 + # This regex is used to extract the part of an ETag within quotation marks, # ignoring any leading weak validator indicator (`W/`). This simplifies # ETag comparison in `#curl_check_http_content`. @@ -38,6 +42,7 @@ module Curl private_constant :CURL_WEIRD_SERVER_REPLY_EXIT_CODE, :CURL_HTTP_RETURNED_ERROR_EXIT_CODE, + :CURL_RECV_ERROR_EXIT_CODE, :ETAG_VALUE_REGEX, :HTTP_RESPONSE_BODY_SEPARATOR, :HTTP_STATUS_LINE_REGEX @@ -237,8 +242,11 @@ def curl_headers(*args, wanted_headers: [], **options) # We still receive usable headers with certain non-successful exit # statuses, so we special case them below. - if result.success? || - [CURL_WEIRD_SERVER_REPLY_EXIT_CODE, CURL_HTTP_RETURNED_ERROR_EXIT_CODE].include?(result.exit_status) + if result.success? || [ + CURL_WEIRD_SERVER_REPLY_EXIT_CODE, + CURL_HTTP_RETURNED_ERROR_EXIT_CODE, + CURL_RECV_ERROR_EXIT_CODE, + ].include?(result.exit_status) parsed_output = parse_curl_output(result.stdout) if request_args.empty?