From c72f5c4fb4b1d496a9bbdb421f25e986f0cba9bf Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sun, 27 Dec 2015 21:52:01 +0100 Subject: deal with empty values properly in deb822 parser Regression introduced in 8710a36a01c0cb1648926792c2ad05185535558e, but such fields are unlikely in practice as it is just as simple to not have a field at all with the same result of not having a value. Closes: 808102 --- apt-pkg/tagfile.cc | 4 +++- test/libapt/tagfile_test.cc | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 668cfc3a4..a0b64f9ca 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -382,7 +382,9 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength, bool const R lastTagHash = AlphaHash(Stop, EndTag - Stop); // find the beginning of the value Stop = Colon + 1; - for (; isspace_ascii(*Stop) != 0; ++Stop); + for (; isspace_ascii(*Stop) != 0; ++Stop) + if (*Stop == '\n' && Stop[1] != ' ') + break; if (Stop >= End) return false; lastTagData.StartValue = Stop - Section; diff --git a/test/libapt/tagfile_test.cc b/test/libapt/tagfile_test.cc index d7030f41a..064e91b79 100644 --- a/test/libapt/tagfile_test.cc +++ b/test/libapt/tagfile_test.cc @@ -186,6 +186,7 @@ TEST(TagFileTest, SpacesEverywhere) "Package: pkgA\n" "Package: pkgB\n" "NoSpaces:yes\n" + "NoValue:\n" "TagSpaces\t :yes\n" "ValueSpaces: \tyes\n" "BothSpaces \t:\t yes\n" @@ -200,6 +201,7 @@ TEST(TagFileTest, SpacesEverywhere) EXPECT_TRUE(section.Scan(content.c_str(), content.size())); EXPECT_TRUE(section.Exists("Package")); EXPECT_TRUE(section.Exists("NoSpaces")); + EXPECT_TRUE(section.Exists("NoValue")); EXPECT_TRUE(section.Exists("TagSpaces")); EXPECT_TRUE(section.Exists("ValueSpaces")); EXPECT_TRUE(section.Exists("BothSpaces")); @@ -209,6 +211,7 @@ TEST(TagFileTest, SpacesEverywhere) EXPECT_TRUE(section.Exists("Multi-Colon")); EXPECT_EQ("pkgC", section.FindS("Package")); EXPECT_EQ("yes", section.FindS("NoSpaces")); + EXPECT_EQ("", section.FindS("NoValue")); EXPECT_EQ("yes", section.FindS("TagSpaces")); EXPECT_EQ("yes", section.FindS("ValueSpaces")); EXPECT_EQ("yes", section.FindS("BothSpaces")); @@ -217,5 +220,5 @@ TEST(TagFileTest, SpacesEverywhere) EXPECT_EQ("yes", section.FindS("Naming Spaces")); EXPECT_EQ(":yes:", section.FindS("Multi-Colon")); // overridden values are still present, but not really accessible - EXPECT_EQ(11, section.Count()); + EXPECT_EQ(12, section.Count()); } -- cgit v1.2.3