Browse Source

Merge pull request #758 from c3h2-ctf/context

Preserve context if out of memory
tags/json-c-0.16-20220414
Eric Hawicz GitHub 3 years ago
parent
commit
0b937f6173
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 41 additions and 6 deletions
  1. +41
    -6
      json_object.c

+ 41
- 6
json_object.c View File

@@ -933,7 +933,21 @@ int json_c_set_serialization_double_format(const char *double_format, int global
#endif
if (global_serialization_float_format)
free(global_serialization_float_format);
global_serialization_float_format = double_format ? strdup(double_format) : NULL;
if (double_format)
{
char *p = strdup(double_format);
if (p == NULL)
{
_json_c_set_last_err("json_c_set_serialization_double_format: "
"out of memory\n");
return -1;
}
global_serialization_float_format = p;
}
else
{
global_serialization_float_format = NULL;
}
}
else if (global_or_thread == JSON_C_OPTION_THREAD)
{
@@ -943,9 +957,23 @@ int json_c_set_serialization_double_format(const char *double_format, int global
free(tls_serialization_float_format);
tls_serialization_float_format = NULL;
}
tls_serialization_float_format = double_format ? strdup(double_format) : NULL;
if (double_format)
{
char *p = strdup(double_format);
if (p == NULL)
{
_json_c_set_last_err("json_c_set_serialization_double_format: "
"out of memory\n");
return -1;
}
tls_serialization_float_format = p;
}
else
{
tls_serialization_float_format = NULL;
}
#else
_json_c_set_last_err("json_c_set_set_serialization_double_format: not compiled "
_json_c_set_last_err("json_c_set_serialization_double_format: not compiled "
"with __thread support\n");
return -1;
#endif
@@ -1590,15 +1618,22 @@ static int json_object_copy_serializer_data(struct json_object *src, struct json
if (dst->_to_json_string == json_object_userdata_to_json_string ||
dst->_to_json_string == _json_object_userdata_to_json_string)
{
char *p;
assert(src->_userdata);
dst->_userdata = strdup(src->_userdata);
p = strdup(src->_userdata);
if (p == NULL)
{
_json_c_set_last_err("json_object_copy_serializer_data: out of memory\n");
return -1;
}
dst->_userdata = p;
}
// else if ... other supported serializers ...
else
{
_json_c_set_last_err(
"json_object_deep_copy: unable to copy unknown serializer data: %p\n",
(void *)dst->_to_json_string);
"json_object_copy_serializer_data: unable to copy unknown serializer data: "
"%p\n", (void *)dst->_to_json_string);
return -1;
}
dst->_user_delete = src->_user_delete;


Loading…
Cancel
Save