Explorar o código

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 %!s(int64=10) %!d(string=hai) anos
pai
achega
c72f5c4fb4
Modificáronse 2 ficheiros con 7 adicións e 2 borrados
  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());
 }