Explorar el Código

* 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 hace 16 años
padre
commit
de2b135892
Se han modificado 2 ficheros con 13 adiciones y 3 borrados
  1. 5 1
      debian/changelog
  2. 8 2
      methods/http.cc

+ 5 - 1
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 <kalnischkies@gmail.com>  Fri, 20 Aug 2010 19:06:29 +0200
+ -- David Kalnischkies <kalnischkies@gmail.com>  Fri, 20 Aug 2010 23:00:54 +0200
 
 apt (0.8.0~pre1) experimental; urgency=low
 

+ 8 - 2
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