The following commit has been merged in the master branch:
commit e4cb12a710457b103a7544c4de5e9fc1b2bd24d8
Author: Guillem Jover <guil...@debian.org>
Date:   Sat May 21 10:38:32 2011 +0200

    libdpkg: Do not allow blank lines in field values
    
    Blank lines in this case mean, lines containing only spaces and tabs.
    This ensure the Perl and C parsers match, and it follows RFC-2822 style
    format, and Debian policy.
    
    Closes: #308082

diff --git a/debian/changelog b/debian/changelog
index df49cca..60d859e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -70,6 +70,7 @@ dpkg (1.16.1) UNRELEASED; urgency=low
     Based on a patch by Ondřej Surý <ond...@debian.org>. Closes: #454694
   * Add ‘.hgsigs’ to the default dpkg-source ignore lists.
     Based on a patch by Jakub Wilk <jw...@debian.org>. Closes: #627462
+  * Do not allow blank lines in field values. Closes: #308082
 
   [ Updated dpkg translations ]
   * German (Sven Joachim). Closes: #620312
diff --git a/lib/dpkg/parse.c b/lib/dpkg/parse.c
index a611515..f71c438 100644
--- a/lib/dpkg/parse.c
+++ b/lib/dpkg/parse.c
@@ -380,6 +380,8 @@ int parsedb(const char *filename, enum parsedbflags flags,
 
     /* Loop per field. */
     for (;;) {
+      bool blank_line;
+
       fs.fieldstart = dataptr - 1;
       while (!EOF_mmap(dataptr, endptr) && !isspace(c) && c!=':' && 
c!=MSDOS_EOF_CHAR)
         c= getc_mmap(dataptr);
@@ -412,9 +414,16 @@ int parsedb(const char *filename, enum parsedbflags flags,
         parse_error(&ps, new_pkg,
                     _("MSDOS EOF char in value of field `%.*s' (missing 
newline?)"),
                     fs.fieldlen, fs.fieldstart);
+
+      blank_line = false;
+
       fs.valuestart = dataptr - 1;
       for (;;) {
         if (c == '\n' || c == MSDOS_EOF_CHAR) {
+          if (blank_line)
+            parse_error(&ps, new_pkg,
+                        _("blank line in value of field '%.*s'"),
+                        fs.fieldlen, fs.fieldstart);
           ps.lno++;
          if (EOF_mmap(dataptr, endptr)) break;
           c= getc_mmap(dataptr);
@@ -422,11 +431,16 @@ int parsedb(const char *filename, enum parsedbflags flags,
           if (EOF_mmap(dataptr, endptr) || c == '\n' || !isspace(c)) break;
           ungetc_mmap(c,dataptr, data);
           c= '\n';
-        } else if (EOF_mmap(dataptr, endptr)) {
+          blank_line = true;
+        } else if (blank_line && !isspace(c)) {
+          blank_line = false;
+        }
+
+        if (EOF_mmap(dataptr, endptr))
           parse_error(&ps, new_pkg,
                       _("EOF during value of field `%.*s' (missing final 
newline)"),
                       fs.fieldlen, fs.fieldstart);
-        }
+
         c= getc_mmap(dataptr);
       }
       fs.valuelen = dataptr - fs.valuestart - 1;

-- 
dpkg's main repository


-- 
To UNSUBSCRIBE, email to debian-dpkg-cvs-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to