At Thu, 1 Feb 2024 09:19:40 +0530, Jeevan Chalke <jeevan.cha...@enterprisedb.com> wrote in > > As Tom suggested, given that similar situations have already been > > disregarded elsewhere, worrying about excessively long input strings > > in this specific instance won't notably improve safety in total. > > > > > Also, for non-string input, we need to convert numeric to string just for > > > the error message, which seems overkill. > > > > As I suggested and you seem to agree, using literally "Nan or > > Infinity" would be sufficient. > > > > I am more concerned about .bigint() and .integer(). We can have errors when > the numeric input is out of range, but not NaN or Infinity. At those > places, we need to convert numeric to string to put that value into the > error. > Do you mean we should still put "Nan or Infinity" there? > > This is the case: > select jsonb_path_query('12345678901', '$.integer()'); > ERROR: numeric argument of jsonpath item method .integer() is out of > range for type integer
Ah.. Understood. "NaN or Infinity" cannot be used in those cases. Additionally, for jpiBoolean and jpiBigint, we lack the text representation of the value. By a quick grepping, I found that the following functions call numeric_out to convert the jbvNumeric values back into text representation. JsonbValueAstext, populate_scalar, iterate_jsonb_values, executeItemOptUnrwapTarget, jsonb_put_escaped_value The function iterate_jsonb_values(), in particular, iterates over a values array, calling numeric_out on each iteration. The following functions re-converts the converted numeric into another type. jsonb_int[248]() converts the numeric value into int2 using numeric_int[248](). jsonb_float[48]() converts it into float4 using numeric_float[48](). Given these facts, it seems more efficient for jbvNumber to retain the original scalar value, converting it only when necessary. If needed, we could also add a numeric struct member as a cache for better performance. I'm not sure we refer the values more than once, though. regards. -- Kyotaro Horiguchi NTT Open Source Software Center