summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Halman <thalman@redhat.com>2022-01-20 10:15:50 +0100
committerNico Williams <nico@cryptonector.com>2022-05-26 16:02:10 -0500
commitc4d39c4d22f2b12225ca1b311708f7e084ad9ff8 (patch)
tree1baa3b1df15380d0170ca16d21f9c9b9218ece92
parent174db0f93552bdb551ae1f3c5c64744df0ad8e2f (diff)
Fix iterration problem for non decimal string
When the string transformation to number failed, all following transformation failed too. This happend because status in decNumberFromString function is updated just in error case. Reusing the DEC_CONTEXT that failed before results into error even if the string is valid number.
-rw-r--r--src/jv.c1
-rw-r--r--tests/man.test5
2 files changed, 6 insertions, 0 deletions
diff --git a/src/jv.c b/src/jv.c
index 9784b22f..e1fb209f 100644
--- a/src/jv.c
+++ b/src/jv.c
@@ -612,6 +612,7 @@ static jv jvp_literal_number_new(const char * literal) {
n->refcnt = JV_REFCNT_INIT;
n->literal_data = NULL;
decContext *ctx = DEC_CONTEXT();
+ decContextClearStatus(ctx, DEC_Conversion_syntax);
decNumberFromString(&n->num_decimal, literal, ctx);
n->num_double = NAN;
diff --git a/tests/man.test b/tests/man.test
index 2a49effe..1c6ff67e 100644
--- a/tests/man.test
+++ b/tests/man.test
@@ -841,3 +841,8 @@ true
{"foo": 42}
{"foo": 43}
+.[]|tonumber?
+["1", "hello", "3", 4]
+1
+3
+4