summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apt-pkg/deb/deblistparser.cc2
-rw-r--r--test/libapt/parsedepends_test.cc33
2 files changed, 34 insertions, 1 deletions
diff --git a/apt-pkg/deb/deblistparser.cc b/apt-pkg/deb/deblistparser.cc
index 46c362952..071189b04 100644
--- a/apt-pkg/deb/deblistparser.cc
+++ b/apt-pkg/deb/deblistparser.cc
@@ -608,7 +608,7 @@ const char *debListParser::ParseDepends(const char *Start, const char *Stop,
{
// Skip the '('
for (I++; I != Stop && isspace_ascii(*I) != 0 ; I++);
- if (I + 3 >= Stop)
+ if (I + 3 > Stop)
return 0;
I = ConvertRelation(I,Op);
diff --git a/test/libapt/parsedepends_test.cc b/test/libapt/parsedepends_test.cc
index f641c8c1c..454908ef7 100644
--- a/test/libapt/parsedepends_test.cc
+++ b/test/libapt/parsedepends_test.cc
@@ -278,3 +278,36 @@ test:
if (runner < 8)
goto test; // this is the prove: tests are really evil ;)
}
+
+TEST(ParseDependsTest, SpaceHate)
+{
+ auto const *const Depends = "no(=1), some(<<1),some (<<1),some( <<1),some(<< 1),some(<<1 ),some(<<1) ,last (=1)";
+ const char* const End = Depends + strlen(Depends);
+
+ const char* Start = Depends;
+ std::string Package;
+ std::string Version;
+ unsigned int Op = 29;
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op);
+ EXPECT_NE(nullptr, Start);
+ EXPECT_EQ("no", Package);
+ EXPECT_EQ("1", Version);
+ EXPECT_EQ(pkgCache::Dep::Equals, Op);
+
+ for (int i = 0; i < 6; ++i)
+ {
+ SCOPED_TRACE(i);
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op);
+ EXPECT_NE(nullptr, Start);
+ EXPECT_EQ("some", Package);
+ EXPECT_EQ("1", Version);
+ EXPECT_EQ(pkgCache::Dep::Less, Op);
+ }
+
+ Start = debListParser::ParseDepends(Start, End, Package, Version, Op);
+ EXPECT_EQ(End, Start);
+ EXPECT_EQ("last", Package);
+ EXPECT_EQ("1", Version);
+ EXPECT_EQ(pkgCache::Dep::Equals, Op);
+}