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