]> git.saurik.com Git - apt.git/blobdiff - apt-inst/contrib/arfile.cc
Merge remote-tracking branch 'mvo/bugfix/bts-712433' into debian/sid
[apt.git] / apt-inst / contrib / arfile.cc
index 7c85f2e866282cf52ae9fcb0a9472348bf3825f8..d7ee528ba9624f94a97e12e313da3e10547def5e 100644 (file)
    ##################################################################### */
                                                                        /*}}}*/
 // Include Files                                                       /*{{{*/
+#include<config.h>
+
 #include <apt-pkg/arfile.h>
 #include <apt-pkg/strutl.h>
+#include <apt-pkg/fileutl.h>
 #include <apt-pkg/error.h>
 
 #include <stdlib.h>
-                                                                       /*}}}*/
+
 #include <apti18n.h>
+                                                                       /*}}}*/
 
 struct ARArchive::MemberHeader
 {
@@ -87,7 +91,7 @@ bool ARArchive::LoadHeaders()
          StrToNum(Head.Size,Memb->Size,sizeof(Head.Size)) == false)
       {
         delete Memb;
-        return _error->Error(_("Invalid archive member header"));
+        return _error->Error(_("Invalid archive member header %s"), Head.Name);
       }
         
       // Check for an extra long name string
@@ -96,13 +100,16 @@ bool ARArchive::LoadHeaders()
         char S[300];
         unsigned long Len;
         if (StrToNum(Head.Name+3,Len,sizeof(Head.Size)-3) == false ||
-            Len >= strlen(S))
+            Len >= sizeof(S))
         {
            delete Memb;
            return _error->Error(_("Invalid archive member header"));
         }
         if (File.Read(S,Len) == false)
+        {
+           delete Memb;
            return false;
+        }
         S[Len] = 0;
         Memb->Name = S;
         Memb->Size -= Len;
@@ -112,7 +119,7 @@ bool ARArchive::LoadHeaders()
       {
         unsigned int I = sizeof(Head.Name) - 1;
         for (; Head.Name[I] == ' ' || Head.Name[I] == '/'; I--);
-        Memb->Name = string(Head.Name,I+1);
+        Memb->Name = std::string(Head.Name,I+1);
       }
 
       // Account for the AR header alignment