mirror of
https://github.com/transmission/transmission
synced 2024-12-21 23:32:35 +00:00
fix: handle nullptr in json serde (#7258)
* fix: handle nullptr in json serde * test: fuzz json serde
This commit is contained in:
parent
affb03a8d2
commit
60e5d98dc1
2 changed files with 21 additions and 3 deletions
|
@ -203,11 +203,11 @@ private:
|
|||
|
||||
std::optional<tr_variant> tr_variant_serde::parse_json(std::string_view input)
|
||||
{
|
||||
auto* const begin = std::data(input);
|
||||
TR_ASSERT(begin != nullptr); // RapidJSON will dereference a nullptr if this is false
|
||||
auto* begin = std::data(input);
|
||||
if (begin == nullptr)
|
||||
{
|
||||
return {};
|
||||
// RapidJSON will dereference a nullptr otherwise
|
||||
begin = "";
|
||||
}
|
||||
|
||||
auto const size = std::size(input);
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include <string>
|
||||
#include <string_view>
|
||||
|
||||
#include <libtransmission/crypto-utils.h>
|
||||
#include <libtransmission/quark.h>
|
||||
#include <libtransmission/utils.h>
|
||||
#include <libtransmission/variant.h>
|
||||
|
@ -239,6 +240,23 @@ TEST_P(JSONTest, unescape)
|
|||
EXPECT_EQ("/usr/lib"sv, sv);
|
||||
}
|
||||
|
||||
TEST_P(JSONTest, parseJsonFuzz)
|
||||
{
|
||||
auto serde = tr_variant_serde::json().inplace();
|
||||
|
||||
auto var = serde.parse({ nullptr, 0U });
|
||||
EXPECT_FALSE(var);
|
||||
|
||||
auto buf = std::vector<char>{};
|
||||
for (size_t i = 0; i < 100000U; ++i)
|
||||
{
|
||||
buf.resize(tr_rand_int(1024U));
|
||||
tr_rand_buffer(std::data(buf), std::size(buf));
|
||||
|
||||
(void)serde.parse({ std::data(buf), std::size(buf) });
|
||||
}
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_SUITE_P( //
|
||||
JSON,
|
||||
JSONTest,
|
||||
|
|
Loading…
Reference in a new issue