From 20e0756c88ea7f1d6567c467ae95b36c973438c3 Mon Sep 17 00:00:00 2001 From: Kamil Dudka Date: Mon, 23 Jul 2012 09:25:19 +0200 Subject: [PATCH] print reason phrase from HTTP status line on error (#676596) --- 0003-curl-7.26.0-d317ca50.patch | 95 +++++++++++++++++++++++++++++++++ curl.spec | 9 +++- 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 0003-curl-7.26.0-d317ca50.patch diff --git a/0003-curl-7.26.0-d317ca50.patch b/0003-curl-7.26.0-d317ca50.patch new file mode 100644 index 0000000..513b074 --- /dev/null +++ b/0003-curl-7.26.0-d317ca50.patch @@ -0,0 +1,95 @@ +From 402328f2fc91e82c1f8b73500e3e8ce2e5b728c5 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka +Date: Fri, 20 Jul 2012 13:33:58 +0200 +Subject: [PATCH] http: print reason phrase from HTTP status line on error + +[upstream commit d317ca50ae7d8bb250431f86709e53b94f7f6ddf] + +Bug: https://bugzilla.redhat.com/676596 +--- + lib/http.c | 39 +++++++++++++++++++++++++++++++++++++-- + tests/data/test24 | 5 ++++- + 2 files changed, 41 insertions(+), 3 deletions(-) + +diff --git a/lib/http.c b/lib/http.c +index a139894..1d6519f 100644 +--- a/lib/http.c ++++ b/lib/http.c +@@ -2727,6 +2727,42 @@ static CURLcode header_append(struct SessionHandle *data, + return CURLE_OK; + } + ++static void print_http_error(struct SessionHandle *data) ++{ ++ struct SingleRequest *k = &data->req; ++ char *beg = k->p; ++ ++ /* make sure that data->req.p points to the HTTP status line */ ++ if(!strncmp(beg, "HTTP", 4)) { ++ ++ /* skip to HTTP status code */ ++ beg = strchr(beg, ' '); ++ if(beg && *++beg) { ++ ++ /* find trailing CR */ ++ char end_char = '\r'; ++ char *end = strchr(beg, end_char); ++ if(!end) { ++ /* try to find LF (workaround for non-compliant HTTP servers) */ ++ end_char = '\n'; ++ end = strchr(beg, end_char); ++ } ++ ++ if(end) { ++ /* temporarily replace CR or LF by NUL and print the error message */ ++ *end = '\0'; ++ failf(data, "The requested URL returned error: %s", beg); ++ ++ /* restore the previously replaced CR or LF */ ++ *end = end_char; ++ return; ++ } ++ } ++ } ++ ++ /* fall-back to printing the HTTP status code only */ ++ failf(data, "The requested URL returned error: %d", k->httpcode); ++} + + /* + * Read any HTTP header lines from the server and pass them to the client app. +@@ -3114,8 +3150,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data, + } + else { + /* serious error, go home! */ +- failf (data, "The requested URL returned error: %d", +- k->httpcode); ++ print_http_error(data); + return CURLE_HTTP_RETURNED_ERROR; + } + } +diff --git a/tests/data/test24 b/tests/data/test24 +index 7985f43..18e7d5b 100644 +--- a/tests/data/test24 ++++ b/tests/data/test24 +@@ -24,7 +24,7 @@ http + HTTP GET fail silently on HTTP error return + + +-http://%HOSTIP:%HTTPPORT/24 --fail ++http://%HOSTIP:%HTTPPORT/24 --fail --silent --show-error + + + +@@ -43,5 +43,8 @@ Accept: */* + + 22 + ++ ++curl: (22) The requested URL returned error: 404 BAD BOY ++ + + +-- +1.7.1 + diff --git a/curl.spec b/curl.spec index 039c6dc..76cd42f 100644 --- a/curl.spec +++ b/curl.spec @@ -1,7 +1,7 @@ Summary: A utility for getting files from remote servers (FTP, HTTP, and others) Name: curl Version: 7.26.0 -Release: 5%{?dist} +Release: 6%{?dist} License: MIT Group: Applications/Internet Source: http://curl.haxx.se/download/%{name}-%{version}.tar.lzma @@ -14,6 +14,9 @@ Patch1: 0001-curl-7.26.0-72f4b534.patch # fix duplicated SSL handshake with multi interface and proxy (#788526) Patch2: 0002-curl-7.26.0-68857e40.patch +# print reason phrase from HTTP status line on error (#676596) +Patch3: 0003-curl-7.26.0-d317ca50.patch + # patch making libcurl multilib ready Patch101: 0101-curl-7.25.0-multilib.patch @@ -115,6 +118,7 @@ documentation of the library, too. # upstream patches %patch1 -p1 %patch2 -p1 +%patch3 -p1 # Fedora patches %patch101 -p1 @@ -237,6 +241,9 @@ rm -rf $RPM_BUILD_ROOT %{_datadir}/aclocal/libcurl.m4 %changelog +* Mon Jul 23 2012 Kamil Dudka 7.26.0-6 +- print reason phrase from HTTP status line on error (#676596) + * Wed Jul 18 2012 Fedora Release Engineering - 7.26.0-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild