fix: potential infinite loop when parsing benc (#2389)

This commit is contained in:
Charles Kerr 2022-01-10 14:27:05 -06:00 committed by GitHub
parent d2e840c64c
commit 43b9d5c147
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 1 deletions

View File

@ -235,6 +235,7 @@ int tr_variantParseBenc(tr_variant& top, int parse_opts, std::string_view benc,
auto const sv = tr_bencParseStr(&benc);
if (!sv)
{
benc.remove_prefix(1);
break;
}

View File

@ -242,9 +242,14 @@ TEST_F(VariantTest, parse)
benc = "le"sv;
EXPECT_TRUE(tr_variantFromBuf(&val, TR_VARIANT_PARSE_BENC | TR_VARIANT_PARSE_INPLACE, benc, &end));
EXPECT_EQ(std::data(benc) + std::size(benc), end);
EXPECT_EQ(benc, tr_variantToStr(&val, TR_VARIANT_FMT_BENC));
tr_variantFree(&val);
benc = "d20:"sv;
end = nullptr;
ok = tr_variantFromBuf(&val, TR_VARIANT_PARSE_BENC | TR_VARIANT_PARSE_INPLACE, benc, &end);
EXPECT_FALSE(ok);
EXPECT_EQ(nullptr, end);
}
TEST_F(VariantTest, bencParseAndReencode)