1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-28 19:15:09 +00:00

AK: Fix JsonValue copy constructor behavior for 64-bit values

The fact that JsonValues can contain 64-bit values isn't a JavaScript
compatible behavior in the first place, but as long as we're supporting
this, we should make sure it works correctly.
This commit is contained in:
Andreas Kling 2020-07-06 17:17:46 +02:00
parent 655f4daeb1
commit ecd4c6718e
2 changed files with 11 additions and 3 deletions

View file

@ -68,7 +68,7 @@ void JsonValue::copy_from(const JsonValue& other)
m_value.as_array = new JsonArray(*other.m_value.as_array); m_value.as_array = new JsonArray(*other.m_value.as_array);
break; break;
default: default:
m_value.as_string = other.m_value.as_string; m_value.as_u64 = other.m_value.as_u64;
break; break;
} }
} }
@ -76,7 +76,7 @@ void JsonValue::copy_from(const JsonValue& other)
JsonValue::JsonValue(JsonValue&& other) JsonValue::JsonValue(JsonValue&& other)
{ {
m_type = exchange(other.m_type, Type::Null); m_type = exchange(other.m_type, Type::Null);
m_value.as_string = exchange(other.m_value.as_string, nullptr); m_value.as_u64 = exchange(other.m_value.as_u64, 0);
} }
JsonValue& JsonValue::operator=(JsonValue&& other) JsonValue& JsonValue::operator=(JsonValue&& other)
@ -84,7 +84,7 @@ JsonValue& JsonValue::operator=(JsonValue&& other)
if (this != &other) { if (this != &other) {
clear(); clear();
m_type = exchange(other.m_type, Type::Null); m_type = exchange(other.m_type, Type::Null);
m_value.as_string = exchange(other.m_value.as_string, nullptr); m_value.as_u64 = exchange(other.m_value.as_u64, 0);
} }
return *this; return *this;
} }

View file

@ -128,4 +128,12 @@ TEST_CASE(json_utf8_multibyte)
EXPECT_EQ(json.as_string() == "\xc5\xa1", true); EXPECT_EQ(json.as_string() == "\xc5\xa1", true);
} }
TEST_CASE(json_64_bit_value)
{
auto big_value = 0x12345678aabbccddull;
JsonValue big_json_value(big_value);
JsonValue big_json_value_copy = big_json_value;
EXPECT_EQ(big_json_value.as_u64(), big_json_value_copy.as_u64());
}
TEST_MAIN(JSON) TEST_MAIN(JSON)