diff options
| author | David Kalnischkies <david@kalnischkies.de> | 2024-05-16 22:15:26 +0000 |
|---|---|---|
| committer | David Kalnischkies <david@kalnischkies.de> | 2024-05-16 22:15:26 +0000 |
| commit | 3347b7a00682a0498a2602ce3e4e72c2c3d49c75 (patch) | |
| tree | f590e9d0c7f045b67a81c3f7274390ce84b74735 /test/libapt | |
| parent | f404c8e06e07c2a89efb0f1ba997a7f1c0c472db (diff) | |
Deal better with spurious spaces in arch restrictions
Another instance of our parser written for sane clean input, but
nowadays used also for user-provided input which can contain very many
strange formatting and especially white spaces all over the place.
Closes: #1071219
Diffstat (limited to 'test/libapt')
| -rw-r--r-- | test/libapt/parsedepends_test.cc | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/libapt/parsedepends_test.cc b/test/libapt/parsedepends_test.cc index 9771c5d24..296750b51 100644 --- a/test/libapt/parsedepends_test.cc +++ b/test/libapt/parsedepends_test.cc @@ -311,3 +311,55 @@ TEST(ParseDependsTest, SpaceHate) EXPECT_EQ("1", Version); EXPECT_EQ(pkgCache::Dep::Equals, Op); } + +static void ArchLimitSpaceTesting(char const * const Depends) +{ + SCOPED_TRACE(Depends); + _config->Set("APT::Architecture", "amd64"); + 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, true, false, true, "amd64"); + EXPECT_NE(nullptr, Start); + EXPECT_EQ("foobar", Package); + EXPECT_EQ("", Version); + EXPECT_EQ(pkgCache::Dep::NoOp, Op); + + Start = debListParser::ParseDepends(Start, End, Package, Version, Op, true, false, true, "amd64"); + EXPECT_NE(nullptr, Start); + EXPECT_EQ("", Package); + EXPECT_EQ("", Version); + EXPECT_EQ(pkgCache::Dep::NoOp, Op); + + Start = debListParser::ParseDepends(Start, End, Package, Version, Op, true, false, true, "amd64"); + EXPECT_EQ(End, Start); + EXPECT_EQ("baz", Package); + EXPECT_EQ("", Version); + EXPECT_EQ(pkgCache::Dep::NoOp, Op); +} +TEST(ParseDependsTest, ArchLimitSpaceNormal) +{ + ArchLimitSpaceTesting("foobar [i386 armhf armel amd64], blah [!arm64 !x32 !amd64], baz"); +} +TEST(ParseDependsTest, ArchLimitSpaceLove) +{ + ArchLimitSpaceTesting("foobar [ i386 armhf armel amd64 ] , blah [ !arm64 !x32 !amd64 ] , baz"); +} +TEST(ParseDependsTest, ArchLimitSpaceNoLove) +{ + ArchLimitSpaceTesting("foobar[i386 armhf armel amd64],blah[!arm64 !x32 !amd64],baz"); +} +TEST(ParseDependsTest, ArchLimitBadSyntax) +{ + std::string Package; + std::string Version; + unsigned int Op = 29; + for (auto const * const Depends : { "foobar [! amd64]", "foobar []", "foobar [ ]" }) + { + SCOPED_TRACE(Depends); + EXPECT_EQ(nullptr, debListParser::ParseDepends(Depends, Depends + strlen(Depends), Package, Version, Op, true, false, true, "amd64")); + } +} |
