Преглед изворни кода

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
David Kalnischkies пре 10 година
родитељ
комит
c72f5c4fb4
2 измењених фајлова са 7 додато и 2 уклоњено
  1. 3 1
      apt-pkg/tagfile.cc
  2. 4 1
      test/libapt/tagfile_test.cc

+ 3 - 1
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;

+ 4 - 1
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());
 }