From de2b1358926d293c85277e1d9a58ac94915470ec Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 21 Aug 2010 00:52:59 +0200 Subject: * methods/http.cc: - some http servers violate HTTP1.1 by not issuing a Reason-Phrase (or at least a space after the code) especially for 200, but lets be nice and ignore it as we don't need the reason in general --- debian/changelog | 6 +++++- methods/http.cc | 10 ++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/debian/changelog b/debian/changelog index a08dce97f..c2c0b605d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -15,8 +15,12 @@ apt (0.8.0~pre2) UNRELEASED; urgency=low - set dir::state::status based at least on dir * apt-pkg/deb/dpkgpm.cc: - use the InstVer instead of the CurrentVer for the autobit transfer + * methods/http.cc: + - some http servers violate HTTP1.1 by not issuing a Reason-Phrase + (or at least a space after the code) especially for 200, but lets + be nice and ignore it as we don't need the reason in general - -- David Kalnischkies Fri, 20 Aug 2010 19:06:29 +0200 + -- David Kalnischkies Fri, 20 Aug 2010 23:00:54 +0200 apt (0.8.0~pre1) experimental; urgency=low diff --git a/methods/http.cc b/methods/http.cc index 9fa74bffa..25e31de9a 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -553,8 +553,14 @@ bool ServerState::HeaderLine(string Line) // Evil servers return no version if (Line[4] == '/') { - if (sscanf(Line.c_str(),"HTTP/%u.%u %u%[^\n]",&Major,&Minor, - &Result,Code) != 4) + int const elements = sscanf(Line.c_str(),"HTTP/%u.%u %u%[^\n]",&Major,&Minor,&Result,Code); + if (elements == 3) + { + Code[0] = '\0'; + if (Debug == true) + clog << "HTTP server doesn't give Reason-Phrase for " << Result << std::endl; + } + else if (elements != 4) return _error->Error(_("The HTTP server sent an invalid reply header")); } else -- cgit v1.2.3