Fix json guid parsing to check for correct hex characters

#3476
This commit is contained in:
Wojtek Figat
2025-05-30 00:42:55 +02:00
parent e00f552baf
commit 294dd3d363
2 changed files with 13 additions and 12 deletions

View File

@@ -28,13 +28,13 @@ void ChangeIds(rapidjson_flax::Value& obj, rapidjson_flax::Document& document, c
else if (obj.IsString() && obj.GetStringLength() == 32)
{
auto value = JsonTools::GetGuid(obj);
if (mapping.TryGet(value, value))
if (value.IsValid() && mapping.TryGet(value, value))
{
// Unoptimized version:
//obj.SetString(value.ToString(Guid::FormatType::N).ToSTD().c_str(), 32, document.GetAllocator());
// Optimized version:
char buffer[32] =
static char buffer[32] =
{
// @formatter:off
'0','0','0','0','0','0','0','0','0','0',
@@ -255,9 +255,8 @@ BoundingBox JsonTools::GetBoundingBox(const Value& value)
Guid JsonTools::GetGuid(const Value& value)
{
if (!value.IsString())
if (!value.IsString() || value.GetStringLength() != 32)
return Guid::Empty;
CHECK_RETURN(value.GetStringLength() == 32, Guid::Empty);
// Split
const char* a = value.GetString();
@@ -267,10 +266,12 @@ Guid JsonTools::GetGuid(const Value& value)
// Parse
Guid result;
StringUtils::ParseHex(a, 8, &result.A);
StringUtils::ParseHex(b, 8, &result.B);
StringUtils::ParseHex(c, 8, &result.C);
StringUtils::ParseHex(d, 8, &result.D);
bool failed = StringUtils::ParseHex(a, 8, &result.A);
failed |= StringUtils::ParseHex(b, 8, &result.B);
failed |= StringUtils::ParseHex(c, 8, &result.C);
failed |= StringUtils::ParseHex(d, 8, &result.D);
if (failed)
return Guid::Empty;
return result;
}

View File

@@ -214,7 +214,7 @@ public:
const auto member = node.FindMember(name);
if (member != node.MemberEnd() && member->value.IsInt())
{
result = member->value.GetInt();
result = (byte)member->value.GetInt();
}
}
@@ -232,7 +232,7 @@ public:
const auto member = node.FindMember(name);
if (member != node.MemberEnd() && member->value.IsInt())
{
result = member->value.GetInt();
result = (uint32)member->value.GetInt();
}
}
@@ -241,7 +241,7 @@ public:
const auto member = node.FindMember(name);
if (member != node.MemberEnd() && member->value.IsInt())
{
result = member->value.GetInt();
result = (int16)member->value.GetInt();
}
}
@@ -250,7 +250,7 @@ public:
const auto member = node.FindMember(name);
if (member != node.MemberEnd() && member->value.IsInt())
{
result = member->value.GetInt();
result = (uint16)member->value.GetInt();
}
}