From 4b787fdee2ae3039906a377c3dc99a63bace0bf8 Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Tue, 9 May 2023 07:40:15 +0200 Subject: [PATCH] Retry `curl_headers` on 400 codes. --- Library/Homebrew/utils/curl.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/utils/curl.rb b/Library/Homebrew/utils/curl.rb index 4b2d3b227f..f7a34104e7 100644 --- a/Library/Homebrew/utils/curl.rb +++ b/Library/Homebrew/utils/curl.rb @@ -216,9 +216,14 @@ module Utils if result.success? || result.exit_status == 22 parsed_output = parse_curl_output(result.stdout) - # If we didn't get any wanted header yet, retry using `GET`. - next if request_args.empty? && wanted_headers.any? && - parsed_output.fetch(:responses).none? { |r| (r.fetch(:headers).keys & wanted_headers).any? } + if request_args.empty? + # If we didn't get any wanted header yet, retry using `GET`. + next if wanted_headers.any? && + parsed_output.fetch(:responses).none? { |r| (r.fetch(:headers).keys & wanted_headers).any? } + + # Some CDNs respond with 400 codes for `HEAD` but resolve with `GET`. + next if (400..499).cover?(parsed_output.fetch(:responses).last&.fetch(:status_code).to_i) + end return parsed_output if result.success? end