Replace sprintf with hex function, this fixes #149
This commit is contained in:
parent
c013223276
commit
14d8a91f73
2 changed files with 24 additions and 8 deletions
16
src/json.hpp
16
src/json.hpp
|
@ -4677,11 +4677,19 @@ class basic_json
|
||||||
{
|
{
|
||||||
if (c >= 0x00 and c <= 0x1f)
|
if (c >= 0x00 and c <= 0x1f)
|
||||||
{
|
{
|
||||||
|
// convert a number 0..15 to its hex representation (0..f)
|
||||||
|
auto hexify = [](const char v) -> char
|
||||||
|
{
|
||||||
|
return (v < 10) ? ('0' + v) : ('a' + v - 10);
|
||||||
|
};
|
||||||
|
|
||||||
// print character c as \uxxxx
|
// print character c as \uxxxx
|
||||||
sprintf(&result[pos + 1], "u%04x", int(c));
|
for(const char m : { 'u', '0', '0', hexify(c >> 4), hexify(c & 0x0f) })
|
||||||
pos += 6;
|
{
|
||||||
// overwrite trailing null character
|
result[++pos] = m;
|
||||||
result[pos] = '\\';
|
}
|
||||||
|
|
||||||
|
++pos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -4677,11 +4677,19 @@ class basic_json
|
||||||
{
|
{
|
||||||
if (c >= 0x00 and c <= 0x1f)
|
if (c >= 0x00 and c <= 0x1f)
|
||||||
{
|
{
|
||||||
|
// convert a number 0..15 to its hex representation (0..f)
|
||||||
|
auto hexify = [](const char v) -> char
|
||||||
|
{
|
||||||
|
return (v < 10) ? ('0' + v) : ('a' + v - 10);
|
||||||
|
};
|
||||||
|
|
||||||
// print character c as \uxxxx
|
// print character c as \uxxxx
|
||||||
sprintf(&result[pos + 1], "u%04x", int(c));
|
for(const char m : { 'u', '0', '0', hexify(c >> 4), hexify(c & 0x0f) })
|
||||||
pos += 6;
|
{
|
||||||
// overwrite trailing null character
|
result[++pos] = m;
|
||||||
result[pos] = '\\';
|
}
|
||||||
|
|
||||||
|
++pos;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue