From patchwork Mon Apr 22 14:25:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Derek Buitenhuis X-Patchwork-Id: 48216 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c906:b0:1a9:af23:56c1 with SMTP id gx6csp2325467pzb; Mon, 22 Apr 2024 07:26:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVzupm2GZI5cpBhVpbXtqt0Fsi6jE3OXeHuAVOIrYMeLuRJ7NkXFMV7FojuiFGoiKe+O30VbF3qel0Kc0Q2d/99tXInHLpvouI8AA== X-Google-Smtp-Source: AGHT+IGx62Q1tKrlRnTpwIswVjS/BB6vPierd8P5oh88GAOxeoDcOHtiwtySNDD3ASYLA4jEihnY X-Received: by 2002:a50:c345:0:b0:571:bed1:3a36 with SMTP id q5-20020a50c345000000b00571bed13a36mr11034512edb.38.1713795997771; Mon, 22 Apr 2024 07:26:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1713795997; cv=none; d=google.com; s=arc-20160816; b=skZyztD+ja2GxqRi1oyaZHnYBJShceVNByjYemdsgi2lTgxlcFjX/3O4VJWpgbHUxQ BvGd+c0n+kipwpO3hRTnpjF92VaUBJyFZiqWp0ccN2umAsWvPw1UGoPV/CJjS4ZctplF qcAwJY3UKCeaJG3HoM5gO/ASsUi8rIeiAz5svZTU/rLRBTCg6nng0dEhKMk4LCE7c8Zn AZvYyDgQABzFqweHXwQeKqtdUJNGPOqQvuL9Dk1TRLkB6axu7+EB/590kkG4xP111iOW B8eVnPi9g+tOMP31RsEnVTMCspI9oDEiF2kGEG9qXAaMTrGV0980UbvaYjxaCSynHO54 imew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=cH0d4FLWmY6AMH6e3Eh7cIMBr7c3yrWi72+uVeb9x1c=; fh=YOA8vD9MJZuwZ71F/05pj6KdCjf6jQRmzLS+CATXUQk=; b=ZpmX2QqRRMwQIb+yHYpEZMjvjPOgspgpYWTrMFOPOvsdItTk36bvH5I6bSt/J1dbPF WDSrLoRbdcaBrN+IzAupAzjLppxm67JDi/Bgj8WVU7TBwH4M9dV2HLjry0ytHdkE9nt6 gJnn0swB/gkDrEZWL5HhyrCmWnGDZj2FAzh4TGNno/gz4cG1J3PINgcuQTzYlg3tsGG7 lnMw33cDFuuziHu9/Tkv/dfSfkb939rpA/Mpw6RdLvHGa7j8AOGMo9UHcej3EqiTO7/h /CeuYQiAA3b8GDnfB7Vn6zFc60DtX7G5qE2GF82D9q4hcfP4vELyLT+Ll/fMAWAE8Gc4 rW9w==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=CboLBhEw; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id i5-20020a50d745000000b0056e31afa851si5764387edj.385.2024.04.22.07.26.36; Mon, 22 Apr 2024 07:26:37 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=CboLBhEw; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6DE9E68D2D0; Mon, 22 Apr 2024 17:26:08 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6785D68D2C4 for ; Mon, 22 Apr 2024 17:26:01 +0300 (EEST) Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-41a70466b77so5706065e9.0 for ; Mon, 22 Apr 2024 07:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1713795960; x=1714400760; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=14hfzgm4/+7TNbrCrIPJlFtaOe+A7suYHw2xrSypk2I=; b=CboLBhEwLTdi/GGzAp06MShQSr1CWP083OzXO+7KxqF3H5C0OgP0FmrhpdlZ6XvNDA AT8Sjl4Bvrocy91kWfgLhHAvESoN9aGHTLw15QwebxKLF3E1ovp5AWVs6yHz4sTfQZlv rjFu8NY9lzlVVdtE5EDFm4YdIsXZN5QIISzb5Uo9lzTmQd3jC91G316+VdP9zznP9Zw7 c3LXBIDRYwJWh33uDVBvcfrxotCDXimatHZsSSlsNArHSMf0vbaM9jNj9fKvFbrJNFA5 5k4GoK0p1TovTYW+DDLeuzJF+gXnfDpZoULYvhBA+rUQQ5+rH34GCWQqQPwf8BmuFVTd 9K/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713795960; x=1714400760; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=14hfzgm4/+7TNbrCrIPJlFtaOe+A7suYHw2xrSypk2I=; b=eZfyQnLRcQBBdzdELL5fHX4x+f+jH+9Dcecs53dtvkCZv155Fg7Pt5dkueUtUxcKZd H9q/9pbmRd13MUX5gu0xf4t4uZCed3rjlISr1U3F7K4t4eHHw/DZzIoIN1FHxh9a+NOQ 13DC1dDM2eBnjPGtCtNLErvbzZmNyzb4a6c1uJExRBAmyLA1dOeJbGKDwLE9EfR/SCGX 0iQS7muOGKChp7Z7hnjtKhLJbCDXfUDweUgSu8QmyKMaFX2T7amya9799VkOknokPNJq izvLT1mzeCeEIbge8yNSyEeV6tV5nGpqmb20lwu+ky5kh42SX23Db2tilvQyXitdj3sy cCSw== X-Gm-Message-State: AOJu0YzQozFl2hiKAaimLyHRYNBy6sDUu4QtdNHflARLFwM7dXCA94SL w58cI3tmtueEMU81sSQ+Zb1lpDPYW2D4qgilIS1x3c7U0YYsv5qW6nCPMQ== X-Received: by 2002:a05:600c:1f81:b0:418:ee2f:cabf with SMTP id je1-20020a05600c1f8100b00418ee2fcabfmr9288957wmb.15.1713795960155; Mon, 22 Apr 2024 07:26:00 -0700 (PDT) Received: from localhost.localdomain (33bf3d9d.skybroadband.com. [51.191.61.157]) by smtp.gmail.com with ESMTPSA id d11-20020a05600c3acb00b0041aa14b4646sm67111wms.8.2024.04.22.07.25.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Apr 2024 07:25:59 -0700 (PDT) From: Derek Buitenhuis To: ffmpeg-devel@ffmpeg.org Date: Mon, 22 Apr 2024 15:25:41 +0100 Message-ID: <20240422142547.281064-4-derek.buitenhuis@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240422142547.281064-1-derek.buitenhuis@gmail.com> References: <20240422142547.281064-1-derek.buitenhuis@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 3/9] avformat/http: Don't bail on parsing headers on "bad" HTTP codes X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: YBn2Ewslbvqq Many "bad" HTTP codes like 429 and 503 may include important info in their headers. Also, in general, there is no purpose in bailing here. Signed-off-by: Derek Buitenhuis --- libavformat/http.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/libavformat/http.c b/libavformat/http.c index bbace2694f..e7603037f4 100644 --- a/libavformat/http.c +++ b/libavformat/http.c @@ -1086,7 +1086,7 @@ static void parse_cache_control(HTTPContext *s, const char *p) } } -static int process_line(URLContext *h, char *line, int line_count) +static int process_line(URLContext *h, char *line, int line_count, int *parsed_http_code) { HTTPContext *s = h->priv_data; const char *auto_method = h->flags & AVIO_FLAG_READ ? "POST" : "GET"; @@ -1166,6 +1166,8 @@ static int process_line(URLContext *h, char *line, int line_count) av_log(h, AV_LOG_TRACE, "http_code=%d\n", s->http_code); + *parsed_http_code = 1; + if ((ret = check_http_code(h, s->http_code, end)) < 0) return ret; } @@ -1338,7 +1340,7 @@ static int http_read_header(URLContext *h) { HTTPContext *s = h->priv_data; char line[MAX_URL_SIZE]; - int err = 0; + int err = 0, http_err = 0; av_freep(&s->new_location); s->expires = 0; @@ -1346,18 +1348,31 @@ static int http_read_header(URLContext *h) s->filesize_from_content_range = UINT64_MAX; for (;;) { + int parsed_http_code = 0; + if ((err = http_get_line(s, line, sizeof(line))) < 0) return err; av_log(h, AV_LOG_TRACE, "header='%s'\n", line); - err = process_line(h, line, s->line_count); - if (err < 0) - return err; + err = process_line(h, line, s->line_count, &parsed_http_code); + if (err < 0) { + if (parsed_http_code) { + http_err = err; + } else { + /* Prefer to return HTTP code error if we've already seen one. */ + if (http_err) + return http_err; + else + return err; + } + } if (err == 0) break; s->line_count++; } + if (http_err) + return http_err; // filesize from Content-Range can always be used, even if using chunked Transfer-Encoding if (s->filesize_from_content_range != UINT64_MAX)