@@ -3564,7 +3564,7 @@ JSONTEST_FIXTURE_LOCAL(CharReaderAllowHexadecimal, disallowHex) {
3564
3564
Json::Value root;
3565
3565
Json::String errs;
3566
3566
{
3567
- char const doc[] = R"( {"a": 0x01 })" ;
3567
+ char const doc[] = R"( { "a":0x9, "b":0xf, "c":0xF })" ;
3568
3568
bool ok = reader->parse (doc, doc + std::strlen (doc), &root, &errs);
3569
3569
JSONTEST_ASSERT (!ok);
3570
3570
JSONTEST_ASSERT_STRING_EQUAL (
@@ -3583,11 +3583,7 @@ JSONTEST_FIXTURE_LOCAL(CharReaderAllowHexadecimal, hexObject) {
3583
3583
{
3584
3584
Json::Value root;
3585
3585
Json::String errs;
3586
- char const doc[] = R"( {
3587
- "a":0x9,
3588
- "b":0xf,
3589
- "c":0xF
3590
- })" ;
3586
+ char const doc[] = R"( { "a":0x9, "b":0xf, "c":0xF })" ;
3591
3587
bool ok = reader->parse (doc, doc + std::strlen (doc), &root, &errs);
3592
3588
JSONTEST_ASSERT (ok);
3593
3589
JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
@@ -3605,18 +3601,31 @@ JSONTEST_FIXTURE_LOCAL(CharReaderAllowHexadecimal, hexNumbers) {
3605
3601
3606
3602
struct TestData {
3607
3603
bool ok;
3608
- Json::String in;
3609
3604
Json::LargestUInt out;
3605
+ Json::String in;
3610
3606
};
3607
+ constexpr int _ = 0 ; // ignored
3611
3608
const TestData test_data[] = {
3612
- {true , " 9" , 9 }, // regular number
3613
- {true , " 0x00" , 0x00 }, // zero
3614
- {true , " 0x0123456789" , 0x0123456789 }, // numeric hex
3615
- {true , " 0xABCDEF" , 0xABCDEF }, // uppercase-letter hex
3616
- {true , " 0xabcdef" , 0xabcdef }, // lowercase-letter hex
3617
- {false , " x" , 0 }, // leading x
3618
- {false , " 0xx" , 0 }, // extra x
3619
- {false , " 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" , 0 } // too long
3609
+ {true , 99 , " 99" }, // regular number
3610
+ {true , 0x99 , " 0x99" }, // hexadecimal number
3611
+ {false , _, " AA" }, // missing prefix
3612
+ {false , _, " xAA" }, // partial prefix
3613
+ {true , 0xAA , " 0xAA" }, // with prefix
3614
+ {true , 0x00 , " 0x00" }, // zero
3615
+ {true , 0x0123456789 , " 0x0123456789" }, // numeric hex
3616
+ {true , 0xABCDEF , " 0xABCDEF" }, // uppercase-letter hex
3617
+ {true , 0xabcdef , " 0xabcdef" }, // lowercase-letter hex
3618
+ #ifdef JSON_HAS_INT64
3619
+ {true , 0xFfffFfffFfffFfff , " 0xFfffFfffFfffFfff" }, // max
3620
+ {false , _, " 0x1FfffFfffFfffFfff" }, // too long
3621
+ #else
3622
+ {true , 0xFfffFfff , " 0xFfffFfff" }, // max
3623
+ {false , _, " 0x1FfffFfff" }, // too long
3624
+ #endif
3625
+ {false , _, " 0x000000000000000000000000000000000000000" }, // too long
3626
+ {false , _, " x" }, // leading x
3627
+ {false , _, " 0x" }, // empty number
3628
+ {false , _, " 0xx" } // extra x
3620
3629
};
3621
3630
for (const auto & td : test_data) {
3622
3631
Json::Value root;
@@ -3627,10 +3636,10 @@ JSONTEST_FIXTURE_LOCAL(CharReaderAllowHexadecimal, hexNumbers) {
3627
3636
JSONTEST_ASSERT (td.ok == ok) << " in: " << td.in ;
3628
3637
if (td.ok )
3629
3638
{
3630
- JSONTEST_ASSERT_EQUAL ( 0u , errs. size () );
3631
- JSONTEST_ASSERT (root.isConvertibleTo (Json::ValueType::uintValue ));
3632
- if (root.isConvertibleTo (Json::ValueType::uintValue ))
3633
- JSONTEST_ASSERT_EQUAL (root.asLargestUInt (), td. out );
3639
+ JSONTEST_ASSERT_STRING_EQUAL ( " " , errs);
3640
+ JSONTEST_ASSERT (root.isUInt64 ( ));
3641
+ if (root.isUInt64 ( ))
3642
+ JSONTEST_ASSERT_EQUAL (td. out , root.asLargestUInt ());
3634
3643
}
3635
3644
else
3636
3645
{
0 commit comments