Prevent NaN in jsonb/plpython transform
As in e348e7ae5727a6da8678036d748e5c5af7deb6c9 for jsonb/plperl, prevent putting a NaN into a jsonb numeric field. Tests for this had been removed in 6278a2a262b63faaf47eb2371f6bcb5b6e3ff118, but in case they are ever resurrected: This would change the output of the test1nan() function to an error.
This commit is contained in:
parent
0996e4be04
commit
40f52b16dd
@ -5,6 +5,7 @@
|
||||
#include "plpy_typeio.h"
|
||||
#include "utils/jsonb.h"
|
||||
#include "utils/fmgrprotos.h"
|
||||
#include "utils/numeric.h"
|
||||
|
||||
PG_MODULE_MAGIC;
|
||||
|
||||
@ -343,6 +344,16 @@ PLyNumber_ToJsonbValue(PyObject *obj, JsonbValue *jbvNum)
|
||||
|
||||
pfree(str);
|
||||
|
||||
/*
|
||||
* jsonb doesn't allow NaN (per JSON specification), so we have to prevent
|
||||
* it here explicitly. (Infinity is also not allowed in jsonb, but
|
||||
* numeric_in above already catches that.)
|
||||
*/
|
||||
if (numeric_is_nan(num))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
|
||||
(errmsg("cannot convert NaN to jsonb"))));
|
||||
|
||||
jbvNum->type = jbvNumeric;
|
||||
jbvNum->val.numeric = num;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user