]> err.no Git - dpkg/commitdiff
Change oldfile-check in process_archive to prevent memory corruption
authorWichert Akkerman <wakkerma@debian.org>
Wed, 13 Oct 1999 18:47:08 +0000 (18:47 +0000)
committerWichert Akkerman <wakkerma@debian.org>
Wed, 13 Oct 1999 18:47:08 +0000 (18:47 +0000)
ChangeLog
main/filesdb.h
main/processarc.c

index 60349b5bbed9e33731b9b2a1192db916299e1a87..8c4d919d560c0faf41f4d053536984a01c1905cc 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Wed Oct 13 20:41:16 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
+
+  * Update oldfile-check in process_archive so we don't experience
+    memory corruption
+
 Wed Oct 13 17:51:17 CEST 1999 Wichert Akkerman <wakkerma@debian.org>
 
   * Merge patches from Ben Collins <bcollins@debian.org>:
index 83c6533cd3c0565c4282147895b597042e910c53..7a3ecf29f9ea66826dda7c821db2ee16d7aa6aaa 100644 (file)
@@ -62,7 +62,6 @@ struct filenamenode {
     fnnf_no_atomic_overwrite= 000020, /* >=1 instance is a dir, cannot rename over */
   } flags; /* Set to zero when a new node is created. */
   const char *oldhash; /* valid iff this namenode is in the newconffiles list */
-  struct stat *stat;
 };
  
 struct fileinlist {
index d155d8d9289dc57e511135800c3eaf25661a4dba..828f7253b016c29fe8fb26af9107c16a9a5fa0b1 100644 (file)
@@ -609,13 +609,10 @@ void process_archive(const char *filename) {
          upgrade/downgrade", fnamevb.buf);
       if (!lstat(fnamevb.buf, &oldfs) && !S_ISDIR(oldfs.st_mode)) {
        for (cfile = newfileslist; cfile; cfile = cfile->next) {
-         if(!cfile->namenode->stat) {
-           newfs = nfmalloc(sizeof(struct stat));
-           if (lstat(cfile->namenode->name, newfs)) continue;
-           cfile->namenode->stat = newfs;
-         } else newfs = cfile->namenode->stat;
-         if (!S_ISDIR(newfs->st_mode) && oldfs.st_dev == newfs->st_dev &&
-             oldfs.st_ino == newfs->st_ino) {
+          if (lstat(cfile->namenode->name, &newfs) || S_ISDIR(newfs.st_mode))
+            continue;
+          if (oldfs.st_dev == newfs.st_dev &&
+              oldfs.st_ino == newfs.st_ino) {
            donotrm = 1;
            debug(dbg_eachfile, "process_archive: not removing %s, since it matches %s",
                fnamevb.buf, cfile->namenode->name);