Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | The previous fix to JSON1 was not complete. A few more tweaks are needed for correct handling of all oversized integers. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4a47f0177851721cdf6c981df962b6e8 |
User & Date: | drh 2015-10-09 20:40:44.669 |
Context
2015-10-10
| ||
14:00 | Add some #ifdef-ery to json1.c to avoid a duplicate typedef when used in the amalgamation, since some compilers become upset over duplicate typedefs. (check-in: de28acd42f user: drh tags: trunk) | |
2015-10-09
| ||
20:40 | The previous fix to JSON1 was not complete. A few more tweaks are needed for correct handling of all oversized integers. (check-in: 4a47f01778 user: drh tags: trunk) | |
18:21 | Fix the JSON1 extension so that it renders integers outside the range of -9223372036854775808 to +9223372036854775807 as floating-point numbers. (check-in: ae736e35fb user: drh tags: trunk) | |
Changes
Changes to ext/misc/json1.c.
︙ | ︙ | |||
24 25 26 27 28 29 30 | #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_JSON1) #if !defined(_SQLITEINT_H_) #include "sqlite3ext.h" #endif SQLITE_EXTENSION_INIT1 #include <assert.h> #include <string.h> | | | 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_JSON1) #if !defined(_SQLITEINT_H_) #include "sqlite3ext.h" #endif SQLITE_EXTENSION_INIT1 #include <assert.h> #include <string.h> #include <ctype.h> /* amalgamator: keep */ #include <stdlib.h> #include <stdarg.h> #define UNUSED_PARAM(X) (void)(X) #ifndef LARGEST_INT64 # define LARGEST_INT64 (0xffffffff|(((sqlite3_int64)0x7fffffff)<<32)) |
︙ | ︙ | |||
486 487 488 489 490 491 492 493 494 495 496 497 498 499 | case JSON_INT: { sqlite3_int64 i = 0; const char *z = pNode->u.zJContent; if( z[0]=='-' ){ z++; } while( z[0]>='0' && z[0]<='9' ){ unsigned v = *(z++) - '0'; if( i>=LARGEST_INT64/10 ){ if( z[0]>='0' && z[0]<='9' ) goto int_as_real; if( v==9 ) goto int_as_real; if( v==8 ){ if( pNode->u.zJContent[0]=='-' ){ sqlite3_result_int64(pCtx, SMALLEST_INT64); goto int_done; }else{ | > | 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 | case JSON_INT: { sqlite3_int64 i = 0; const char *z = pNode->u.zJContent; if( z[0]=='-' ){ z++; } while( z[0]>='0' && z[0]<='9' ){ unsigned v = *(z++) - '0'; if( i>=LARGEST_INT64/10 ){ if( i>LARGEST_INT64/10 ) goto int_as_real; if( z[0]>='0' && z[0]<='9' ) goto int_as_real; if( v==9 ) goto int_as_real; if( v==8 ){ if( pNode->u.zJContent[0]=='-' ){ sqlite3_result_int64(pCtx, SMALLEST_INT64); goto int_done; }else{ |
︙ | ︙ |