From: Eric Haszlakiewicz Date: Thu, 13 Feb 2020 03:11:10 +0000 (+0000) Subject: Issue #539: reset the serializer when json_object_set_double() is called and the... X-Git-Tag: json-c-0.14-20200419~58 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ae13ca524a0e4567489c1e5138deedd568c161b6;p=json-c Issue #539: reset the serializer when json_object_set_double() is called and the current serializer is the one that json_object_new_double_s() used. --- diff --git a/json_object.c b/json_object.c index 458014c..1d41f6a 100644 --- a/json_object.c +++ b/json_object.c @@ -999,6 +999,8 @@ int json_object_set_double(struct json_object *jso,double new_value){ if (!jso || jso->o_type!=json_type_double) return 0; jso->o.c_double=new_value; + if (jso->_to_json_string == &json_object_userdata_to_json_string) + json_object_set_serializer(jso, NULL, NULL, NULL); return 1; } diff --git a/tests/test_set_value.c b/tests/test_set_value.c index 1f80b0e..50957d2 100644 --- a/tests/test_set_value.c +++ b/tests/test_set_value.c @@ -45,8 +45,14 @@ int main(int argc, char **argv) assert (strcmp(json_object_get_string(tmp),SHORT)==0); json_object_put(tmp); printf("STRING PASSED\n"); - - + + tmp = json_tokener_parse("1.234"); + json_object_set_double(tmp, 12.3); + const char *serialized = json_object_to_json_string(tmp); + fprintf(stderr, "%s\n", serialized); + assert(strncmp(serialized, "12.3", 4)==0); + printf("PARSE AND SET PASSED\n"); + printf("PASSED\n"); return 0; } diff --git a/tests/test_set_value.expected b/tests/test_set_value.expected index 6a900f9..4cbd5bc 100644 --- a/tests/test_set_value.expected +++ b/tests/test_set_value.expected @@ -3,4 +3,5 @@ INT64 PASSED BOOL PASSED DOUBLE PASSED STRING PASSED +PARSE AND SET PASSED PASSED