1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-11-09 14:21:03 +03:00

Fix JSON to JSONB translation so that it deals correctly with Infinity

and NaN.

FossilOrigin-Name: 178cb84f36bdb45ba17511900d6d8ea8dfa14912fc5bf7094a20348174a36c95
This commit is contained in:
drh
2023-12-18 18:31:27 +00:00
parent 095f2c5082
commit fc76750f61
4 changed files with 47 additions and 11 deletions

View File

@@ -3041,13 +3041,29 @@ static int jsonFunctionArgToBlob(
}
break;
}
case SQLITE_FLOAT:
case SQLITE_FLOAT: {
double r = sqlite3_value_double(pArg);
if( sqlite3IsNaN(r) ){
jsonBlobAppendNode(pParse, JSONB_NULL, 0, 0);
}else{
int n = sqlite3_value_bytes(pArg);
const char *z = (const char*)sqlite3_value_text(pArg);
if( z==0 ) return 1;
if( z[0]=='I' ){
jsonBlobAppendNode(pParse, JSONB_FLOAT, 5, "9e999");
}else if( z[0]=='-' && z[1]=='I' ){
jsonBlobAppendNode(pParse, JSONB_FLOAT, 6, "-9e999");
}else{
jsonBlobAppendNode(pParse, JSONB_FLOAT, n, z);
}
}
break;
}
case SQLITE_INTEGER: {
int n = sqlite3_value_bytes(pArg);
const char *z = (const char*)sqlite3_value_text(pArg);
int e = eType==SQLITE_INTEGER ? JSONB_INT : JSONB_FLOAT;
if( z==0 ) return 1;
jsonBlobAppendNode(pParse, e, n, z);
jsonBlobAppendNode(pParse, JSONB_INT, n, z);
break;
}
}