fix: potential infinite loop when parsing benc (#2389)
This commit is contained in:
parent
d2e840c64c
commit
43b9d5c147
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue