avoid delay if FTP is aborted in CURLOPT_HEADERFUNCTION callback (#1005686)

This commit is contained in:
Kamil Dudka 2013-09-09 13:40:57 +02:00
parent 159ba1a770
commit d26889345a
2 changed files with 51 additions and 1 deletions

View File

@ -0,0 +1,43 @@
From 8ec06ee49bac9191260b21e52c932da1101d83ef Mon Sep 17 00:00:00 2001
From: Kamil Dudka <kdudka@redhat.com>
Date: Mon, 9 Sep 2013 13:10:53 +0200
Subject: [PATCH] url: handle abortion by read/write callbacks, too
Otherwise, the FTP protocol would unnecessarily hang 60 seconds if
aborted in the CURLOPT_HEADERFUNCTION callback.
Reported by: Tomas Mlcoch
Bug: https://bugzilla.redhat.com/1005686
[upstream commit c639d725a37c91fb49bb3a689cb2596fad3a0645]
---
lib/url.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/lib/url.c b/lib/url.c
index 7cec5bc..80e1e67 100644
--- a/lib/url.c
+++ b/lib/url.c
@@ -5666,12 +5666,18 @@ CURLcode Curl_done(struct connectdata **connp,
conn->dns_entry = NULL;
}
- if(status == CURLE_ABORTED_BY_CALLBACK)
+ switch(status) {
+ case CURLE_ABORTED_BY_CALLBACK:
+ case CURLE_READ_ERROR:
+ case CURLE_WRITE_ERROR:
/* When we're aborted due to a callback return code it basically have to
be counted as premature as there is trouble ahead if we don't. We have
many callbacks and protocols work differently, we could potentially do
this more fine-grained in the future. */
premature = TRUE;
+ default:
+ break;
+ }
/* this calls the protocol-specific function pointer previously set */
if(conn->handler->done)
--
1.7.1

View File

@ -1,7 +1,7 @@
Summary: A utility for getting files from remote servers (FTP, HTTP, and others) Summary: A utility for getting files from remote servers (FTP, HTTP, and others)
Name: curl Name: curl
Version: 7.32.0 Version: 7.32.0
Release: 1%{?dist} Release: 2%{?dist}
License: MIT License: MIT
Group: Applications/Internet Group: Applications/Internet
Source: http://curl.haxx.se/download/%{name}-%{version}.tar.lzma Source: http://curl.haxx.se/download/%{name}-%{version}.tar.lzma
@ -10,6 +10,9 @@ Source2: curlbuild.h
# make sure that NSS is initialized prior to calling PK11_GenerateRandom() # make sure that NSS is initialized prior to calling PK11_GenerateRandom()
Patch1: 0001-curl-7.32.0-204126a5.patch Patch1: 0001-curl-7.32.0-204126a5.patch
# avoid delay if FTP is aborted in CURLOPT_HEADERFUNCTION callback (#1005686)
Patch2: 0002-curl-7.32.0-c639d725.patch
# patch making libcurl multilib ready # patch making libcurl multilib ready
Patch101: 0101-curl-7.32.0-multilib.patch Patch101: 0101-curl-7.32.0-multilib.patch
@ -108,6 +111,7 @@ documentation of the library, too.
# upstream patches # upstream patches
%patch1 -p1 %patch1 -p1
%patch2 -p1
# Fedora patches # Fedora patches
%patch101 -p1 %patch101 -p1
@ -226,6 +230,9 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/aclocal/libcurl.m4 %{_datadir}/aclocal/libcurl.m4
%changelog %changelog
* Mon Sep 09 2013 Kamil Dudka <kdudka@redhat.com> 7.32.0-2
- avoid delay if FTP is aborted in CURLOPT_HEADERFUNCTION callback (#1005686)
* Mon Aug 12 2013 Kamil Dudka <kdudka@redhat.com> 7.32.0-1 * Mon Aug 12 2013 Kamil Dudka <kdudka@redhat.com> 7.32.0-1
- new upstream release - new upstream release
- make sure that NSS is initialized prior to calling PK11_GenerateRandom() - make sure that NSS is initialized prior to calling PK11_GenerateRandom()