summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2011-07-27 23:50:55 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2011-07-27 23:50:55 +0200
commitae6ea526d65eb560b825677e8aac4a3fa15934e4 (patch)
treeecbc02045dfc78aa9f09295f07918f9224edbdb5
parented6ba81db1b2832089ea443cf0030ab3f15fda97 (diff)
* apt-pkg/deb/deblistparser.cc:
- do not assume that the last char on a line is a \n (Closes: #633350)
-rw-r--r--apt-pkg/deb/deblistparser.cc6
-rw-r--r--debian/changelog8
-rwxr-xr-xtest/integration/test-bug-633350-do-not-kill-last-char-in-Release27
3 files changed, 40 insertions, 1 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 651fa2a81..fd5a1e475 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -805,6 +805,10 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,
for (++dataStart; *dataStart == ' '; ++dataStart);
char* dataEnd = dataStart;
for (++dataEnd; *dataEnd != '\0'; ++dataEnd);
+ // The last char should be a newline, but we can never be sure: #633350
+ char* lineEnd = dataEnd;
+ for (--lineEnd; *lineEnd == '\r' || *lineEnd == '\n'; --lineEnd);
+ ++lineEnd;
// which datastorage need to be updated
map_ptrloc* writeTo = NULL;
@@ -819,7 +823,7 @@ bool debListParser::LoadReleaseInfo(pkgCache::PkgFileIterator &FileI,
APT_PARSER_WRITETO(FileI->Label, "Label")
#undef APT_PARSER_WRITETO
#define APT_PARSER_FLAGIT(X) else if (strncmp(#X, buffer, len) == 0) \
- pkgTagSection::FindFlag(FileI->Flags, pkgCache::Flag:: X, dataStart, dataEnd-1);
+ pkgTagSection::FindFlag(FileI->Flags, pkgCache::Flag:: X, dataStart, lineEnd);
APT_PARSER_FLAGIT(NotAutomatic)
APT_PARSER_FLAGIT(ButAutomaticUpgrades)
#undef APT_PARSER_FLAGIT
diff --git a/debian/changelog b/debian/changelog
index 1eeb99b98..3f723f2d6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+apt (0.8.15.5) UNRELEASED; urgency=low
+
+ [ David Kalnischkies ]
+ * apt-pkg/deb/deblistparser.cc:
+ - do not assume that the last char on a line is a \n (Closes: #633350)
+
+ -- David Kalnischkies <kalnischkies@gmail.com> Wed, 27 Jul 2011 23:25:45 +0200
+
apt (0.8.15.4) unstable; urgency=low
[ David Miller ]
diff --git a/test/integration/test-bug-633350-do-not-kill-last-char-in-Release b/test/integration/test-bug-633350-do-not-kill-last-char-in-Release
new file mode 100755
index 000000000..3d3835507
--- /dev/null
+++ b/test/integration/test-bug-633350-do-not-kill-last-char-in-Release
@@ -0,0 +1,27 @@
+#!/bin/sh
+set -e
+
+TESTDIR=$(readlink -f $(dirname $0))
+. $TESTDIR/framework
+setupenvironment
+configarchitecture 'amd64'
+
+insertpackage 'unstable' 'cool' 'amd64' '1.0'
+
+setupaptarchive 2> /dev/null
+
+echo 'NotAutomatic: yes' >> aptarchive/dists/unstable/Release
+
+signreleasefiles
+find aptarchive/dists -name 'InRelease' -delete
+
+rm -rf rootdir/var/lib/apt/lists rootdir/var/cache/apt
+
+OUTPUT="$(aptget update 2>&1)"
+msgtest 'Check that parsing happens without warnings' 'with missing newline'
+if echo "${OUTPUT}" | grep '^W:' > /dev/null; then
+ msgfail
+ echo "${OUTPUT}"
+else
+ msgpass
+fi