Bläddra i källkod

libdpkg: Refactor ar member check into new dpkg_ar_member_is_illegal()

Guillem Jover 14 år sedan
förälder
incheckning
dea5536797
5 ändrade filer med 12 tillägg och 3 borttagningar
  1. 1 1
      dpkg-deb/extract.c
  2. 2 2
      dpkg-split/info.c
  3. 6 0
      lib/dpkg/ar.c
  4. 2 0
      lib/dpkg/ar.h
  5. 1 0
      lib/dpkg/libdpkg.map

+ 1 - 1
dpkg-deb/extract.c

@@ -144,7 +144,7 @@ extracthalf(const char *debar, const char *dir, const char *taroption,
 
       dpkg_ar_normalize_name(&arh);
 
-      if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag)))
+      if (dpkg_ar_member_is_illegal(&arh))
         ohshit(_("file '%.250s' is corrupt - bad archive header magic"), debar);
       memberlen = dpkg_ar_member_get_size(debar, &arh);
       if (!header_done) {

+ 2 - 2
dpkg-split/info.c

@@ -99,7 +99,7 @@ struct partinfo *read_info(FILE *partfile, const char *fn, struct partinfo *ir)
 
   if (strncmp(arh.ar_name, PARTMAGIC, sizeof(arh.ar_name)) != 0)
     return NULL;
-  if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag)))
+  if (dpkg_ar_member_is_illegal(&arh))
     ohshit(_("file `%.250s' is corrupt - bad magic at end of first header"),fn);
   thisilen = dpkg_ar_member_get_size(fn, &arh);
   if (thisilen >= readinfobuflen) {
@@ -162,7 +162,7 @@ struct partinfo *read_info(FILE *partfile, const char *fn, struct partinfo *ir)
 
   dpkg_ar_normalize_name(&arh);
 
-  if (memcmp(arh.ar_fmag,ARFMAG,sizeof(arh.ar_fmag)))
+  if (dpkg_ar_member_is_illegal(&arh))
     ohshit(_("file `%.250s' is corrupt - bad magic at end of second header"),fn);
   if (strncmp(arh.ar_name,"data",4))
     ohshit(_("file `%.250s' is corrupt - second member is not data member"),fn);

+ 6 - 0
lib/dpkg/ar.c

@@ -74,6 +74,12 @@ dpkg_ar_member_get_size(const char *ar_name, struct ar_hdr *arh)
 	return size;
 }
 
+bool
+dpkg_ar_member_is_illegal(struct ar_hdr *arh)
+{
+	return memcmp(arh->ar_fmag, ARFMAG, sizeof(arh->ar_fmag)) != 0;
+}
+
 void
 dpkg_ar_put_magic(const char *ar_name, int ar_fd)
 {

+ 2 - 0
lib/dpkg/ar.h

@@ -23,6 +23,7 @@
 
 #include <sys/types.h>
 
+#include <stdbool.h>
 #include <ar.h>
 
 #include <dpkg/macros.h>
@@ -32,6 +33,7 @@ DPKG_BEGIN_DECLS
 #define DPKG_AR_MAGIC "!<arch>\n"
 
 void dpkg_ar_normalize_name(struct ar_hdr *arh);
+bool dpkg_ar_member_is_illegal(struct ar_hdr *arh);
 
 void dpkg_ar_put_magic(const char *ar_name, int ar_fd);
 void dpkg_ar_member_put_header(const char *ar_name, int ar_fd,

+ 1 - 0
lib/dpkg/libdpkg.map

@@ -9,6 +9,7 @@ global:
 
 	# Ar support
 	dpkg_ar_normalize_name;
+	dpkg_ar_member_is_illegal;
 
 local:
 	*;