Browse Source

Fix a segfault when reading an empty file in parsedb().

Adam Heath 25 years ago
parent
commit
3e91d50e81
3 changed files with 15 additions and 3 deletions
  1. 5 0
      ChangeLog
  2. 7 0
      debian/changelog
  3. 3 3
      lib/parse.c

+ 5 - 0
ChangeLog

@@ -1,3 +1,8 @@
+Fri Apr 27 13:14:04 CDT 2001 Adam Heath <doogie@debian.org>
+
+  * lib/parse.c, debian/changelog: Fix a segfault when reading an empty
+    file in parsedb().
+
 Fri Apr 27 07:39:00 CEST 2001 peter karlsson <peterk@debian.org>
 
   * doc/sv/dpkg.8: Updated to mtach main/dpkg.8 1.25.

+ 7 - 0
debian/changelog

@@ -1,3 +1,10 @@
+dpkg (1.9.1) unstable; urgency=low
+
+  * Fix segfault with empty status and available, and when missing a
+    trailing new line.  Closes: #95496
+
+ -- Wichert Akkerman <wakkerma@debian.org>  UNRELEASED
+
 dpkg (1.9.0) unstable; urgency=low
 
   * Things should mostly work OpenBSD 2.8 as well now

+ 3 - 3
lib/parse.c

@@ -132,7 +132,7 @@ int parsedb(const char *filename, enum parsedbflags flags,
     blankpackage(&newpig);
     blankpackageperfile(newpifp);
 /* Skip adjacent new lines */
-    for (;;) {
+    while(!EOF_mmap(dataptr, endptr)) {
       c= getc_mmap(dataptr); if (c!='\n' && c!=MSDOS_EOF_CHAR ) break;
       lno++;
     }
@@ -156,9 +156,9 @@ int parsedb(const char *filename, enum parsedbflags flags,
         parseerr(NULL,filename,lno, warnto,warncount,&newpig,0,
                  _("field name `%.*s' must be followed by colon"),fieldlen,fieldstart);
 /* Skip space after ':' but before value and eol */
-      for (;;) {
+      while(!EOF_mmap(dataptr, endptr)) {
         c= getc_mmap(dataptr);
-        if (EOF_mmap(dataptr, endptr) || c == '\n' || !isspace(c)) break;
+        if (c == '\n' || !isspace(c)) break;
       }
       if (EOF_mmap(dataptr, endptr))
         parseerr(NULL,filename,lno, warnto,warncount,&newpig,0,