diff options
author | David Kalnischkies <david@kalnischkies.de> | 2015-12-27 21:52:01 +0100 |
---|---|---|
committer | David Kalnischkies <david@kalnischkies.de> | 2015-12-27 21:52:01 +0100 |
commit | c72f5c4fb4b1d496a9bbdb421f25e986f0cba9bf (patch) | |
tree | b17bb61d7a8e3deb9dfa9d29f280410a35ab39ee | |
parent | c3c3bd043b262dd5544594abd5e5bd4377a679d6 (diff) |
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
-rw-r--r-- | apt-pkg/tagfile.cc | 4 | ||||
-rw-r--r-- | 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()); } |