Fossil SCM
Import the SQLite fix for integer to floating-point overflow from upstream. Fossil does not really need this. The import is for testing SQLite.
Commit
d79ddface96751d8db09e75ee7b50e5c68655edb
Parent
1caa5101700e512…
2 files changed
+6
-4
+1
-1
+6
-4
| --- src/sqlite3.c | ||
| +++ src/sqlite3.c | ||
| @@ -673,11 +673,11 @@ | ||
| 673 | 673 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 674 | 674 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 675 | 675 | */ |
| 676 | 676 | #define SQLITE_VERSION "3.7.15" |
| 677 | 677 | #define SQLITE_VERSION_NUMBER 3007015 |
| 678 | -#define SQLITE_SOURCE_ID "2012-12-08 22:14:29 92c9ab56b1c67b9468bec57ab1d2c483a69a2810" | |
| 678 | +#define SQLITE_SOURCE_ID "2012-12-10 22:19:14 bd7aeeb691fee69dd6a562138a7aba8e8e192272" | |
| 679 | 679 | |
| 680 | 680 | /* |
| 681 | 681 | ** CAPI3REF: Run-Time Library Version Numbers |
| 682 | 682 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 683 | 683 | ** |
| @@ -64089,10 +64089,11 @@ | ||
| 64089 | 64089 | } af; |
| 64090 | 64090 | struct OP_Concat_stack_vars { |
| 64091 | 64091 | i64 nByte; |
| 64092 | 64092 | } ag; |
| 64093 | 64093 | struct OP_Remainder_stack_vars { |
| 64094 | + char bIntint; /* Started out as two integer operands */ | |
| 64094 | 64095 | int flags; /* Combined MEM_* flags from both inputs */ |
| 64095 | 64096 | i64 iA; /* Integer value of left operand */ |
| 64096 | 64097 | i64 iB; /* Integer value of right operand */ |
| 64097 | 64098 | double rA; /* Real value of left operand */ |
| 64098 | 64099 | double rB; /* Real value of right operand */ |
| @@ -65194,10 +65195,11 @@ | ||
| 65194 | 65195 | case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ |
| 65195 | 65196 | case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ |
| 65196 | 65197 | case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ |
| 65197 | 65198 | case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ |
| 65198 | 65199 | #if 0 /* local variables moved into u.ah */ |
| 65200 | + char bIntint; /* Started out as two integer operands */ | |
| 65199 | 65201 | int flags; /* Combined MEM_* flags from both inputs */ |
| 65200 | 65202 | i64 iA; /* Integer value of left operand */ |
| 65201 | 65203 | i64 iB; /* Integer value of right operand */ |
| 65202 | 65204 | double rA; /* Real value of left operand */ |
| 65203 | 65205 | double rB; /* Real value of right operand */ |
| @@ -65211,10 +65213,11 @@ | ||
| 65211 | 65213 | u.ah.flags = pIn1->flags | pIn2->flags; |
| 65212 | 65214 | if( (u.ah.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; |
| 65213 | 65215 | if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){ |
| 65214 | 65216 | u.ah.iA = pIn1->u.i; |
| 65215 | 65217 | u.ah.iB = pIn2->u.i; |
| 65218 | + u.ah.bIntint = 1; | |
| 65216 | 65219 | switch( pOp->opcode ){ |
| 65217 | 65220 | case OP_Add: if( sqlite3AddInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65218 | 65221 | case OP_Subtract: if( sqlite3SubInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65219 | 65222 | case OP_Multiply: if( sqlite3MulInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65220 | 65223 | case OP_Divide: { |
| @@ -65231,10 +65234,11 @@ | ||
| 65231 | 65234 | } |
| 65232 | 65235 | } |
| 65233 | 65236 | pOut->u.i = u.ah.iB; |
| 65234 | 65237 | MemSetTypeFlag(pOut, MEM_Int); |
| 65235 | 65238 | }else{ |
| 65239 | + u.ah.bIntint = 0; | |
| 65236 | 65240 | fp_math: |
| 65237 | 65241 | u.ah.rA = sqlite3VdbeRealValue(pIn1); |
| 65238 | 65242 | u.ah.rB = sqlite3VdbeRealValue(pIn2); |
| 65239 | 65243 | switch( pOp->opcode ){ |
| 65240 | 65244 | case OP_Add: u.ah.rB += u.ah.rA; break; |
| @@ -65262,11 +65266,11 @@ | ||
| 65262 | 65266 | if( sqlite3IsNaN(u.ah.rB) ){ |
| 65263 | 65267 | goto arithmetic_result_is_null; |
| 65264 | 65268 | } |
| 65265 | 65269 | pOut->r = u.ah.rB; |
| 65266 | 65270 | MemSetTypeFlag(pOut, MEM_Real); |
| 65267 | - if( (u.ah.flags & MEM_Real)==0 ){ | |
| 65271 | + if( (u.ah.flags & MEM_Real)==0 && !u.ah.bIntint ){ | |
| 65268 | 65272 | sqlite3VdbeIntegerAffinity(pOut); |
| 65269 | 65273 | } |
| 65270 | 65274 | #endif |
| 65271 | 65275 | } |
| 65272 | 65276 | break; |
| @@ -66011,12 +66015,10 @@ | ||
| 66011 | 66015 | |
| 66012 | 66016 | /* Opcode: Once P1 P2 * * * |
| 66013 | 66017 | ** |
| 66014 | 66018 | ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise, |
| 66015 | 66019 | ** set the flag and fall through to the next instruction. |
| 66016 | -** | |
| 66017 | -** See also: JumpOnce | |
| 66018 | 66020 | */ |
| 66019 | 66021 | case OP_Once: { /* jump */ |
| 66020 | 66022 | assert( pOp->p1<p->nOnceFlag ); |
| 66021 | 66023 | if( p->aOnceFlag[pOp->p1] ){ |
| 66022 | 66024 | pc = pOp->p2-1; |
| 66023 | 66025 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -673,11 +673,11 @@ | |
| 673 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 674 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 675 | */ |
| 676 | #define SQLITE_VERSION "3.7.15" |
| 677 | #define SQLITE_VERSION_NUMBER 3007015 |
| 678 | #define SQLITE_SOURCE_ID "2012-12-08 22:14:29 92c9ab56b1c67b9468bec57ab1d2c483a69a2810" |
| 679 | |
| 680 | /* |
| 681 | ** CAPI3REF: Run-Time Library Version Numbers |
| 682 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 683 | ** |
| @@ -64089,10 +64089,11 @@ | |
| 64089 | } af; |
| 64090 | struct OP_Concat_stack_vars { |
| 64091 | i64 nByte; |
| 64092 | } ag; |
| 64093 | struct OP_Remainder_stack_vars { |
| 64094 | int flags; /* Combined MEM_* flags from both inputs */ |
| 64095 | i64 iA; /* Integer value of left operand */ |
| 64096 | i64 iB; /* Integer value of right operand */ |
| 64097 | double rA; /* Real value of left operand */ |
| 64098 | double rB; /* Real value of right operand */ |
| @@ -65194,10 +65195,11 @@ | |
| 65194 | case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ |
| 65195 | case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ |
| 65196 | case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ |
| 65197 | case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ |
| 65198 | #if 0 /* local variables moved into u.ah */ |
| 65199 | int flags; /* Combined MEM_* flags from both inputs */ |
| 65200 | i64 iA; /* Integer value of left operand */ |
| 65201 | i64 iB; /* Integer value of right operand */ |
| 65202 | double rA; /* Real value of left operand */ |
| 65203 | double rB; /* Real value of right operand */ |
| @@ -65211,10 +65213,11 @@ | |
| 65211 | u.ah.flags = pIn1->flags | pIn2->flags; |
| 65212 | if( (u.ah.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; |
| 65213 | if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){ |
| 65214 | u.ah.iA = pIn1->u.i; |
| 65215 | u.ah.iB = pIn2->u.i; |
| 65216 | switch( pOp->opcode ){ |
| 65217 | case OP_Add: if( sqlite3AddInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65218 | case OP_Subtract: if( sqlite3SubInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65219 | case OP_Multiply: if( sqlite3MulInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65220 | case OP_Divide: { |
| @@ -65231,10 +65234,11 @@ | |
| 65231 | } |
| 65232 | } |
| 65233 | pOut->u.i = u.ah.iB; |
| 65234 | MemSetTypeFlag(pOut, MEM_Int); |
| 65235 | }else{ |
| 65236 | fp_math: |
| 65237 | u.ah.rA = sqlite3VdbeRealValue(pIn1); |
| 65238 | u.ah.rB = sqlite3VdbeRealValue(pIn2); |
| 65239 | switch( pOp->opcode ){ |
| 65240 | case OP_Add: u.ah.rB += u.ah.rA; break; |
| @@ -65262,11 +65266,11 @@ | |
| 65262 | if( sqlite3IsNaN(u.ah.rB) ){ |
| 65263 | goto arithmetic_result_is_null; |
| 65264 | } |
| 65265 | pOut->r = u.ah.rB; |
| 65266 | MemSetTypeFlag(pOut, MEM_Real); |
| 65267 | if( (u.ah.flags & MEM_Real)==0 ){ |
| 65268 | sqlite3VdbeIntegerAffinity(pOut); |
| 65269 | } |
| 65270 | #endif |
| 65271 | } |
| 65272 | break; |
| @@ -66011,12 +66015,10 @@ | |
| 66011 | |
| 66012 | /* Opcode: Once P1 P2 * * * |
| 66013 | ** |
| 66014 | ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise, |
| 66015 | ** set the flag and fall through to the next instruction. |
| 66016 | ** |
| 66017 | ** See also: JumpOnce |
| 66018 | */ |
| 66019 | case OP_Once: { /* jump */ |
| 66020 | assert( pOp->p1<p->nOnceFlag ); |
| 66021 | if( p->aOnceFlag[pOp->p1] ){ |
| 66022 | pc = pOp->p2-1; |
| 66023 |
| --- src/sqlite3.c | |
| +++ src/sqlite3.c | |
| @@ -673,11 +673,11 @@ | |
| 673 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 674 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 675 | */ |
| 676 | #define SQLITE_VERSION "3.7.15" |
| 677 | #define SQLITE_VERSION_NUMBER 3007015 |
| 678 | #define SQLITE_SOURCE_ID "2012-12-10 22:19:14 bd7aeeb691fee69dd6a562138a7aba8e8e192272" |
| 679 | |
| 680 | /* |
| 681 | ** CAPI3REF: Run-Time Library Version Numbers |
| 682 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 683 | ** |
| @@ -64089,10 +64089,11 @@ | |
| 64089 | } af; |
| 64090 | struct OP_Concat_stack_vars { |
| 64091 | i64 nByte; |
| 64092 | } ag; |
| 64093 | struct OP_Remainder_stack_vars { |
| 64094 | char bIntint; /* Started out as two integer operands */ |
| 64095 | int flags; /* Combined MEM_* flags from both inputs */ |
| 64096 | i64 iA; /* Integer value of left operand */ |
| 64097 | i64 iB; /* Integer value of right operand */ |
| 64098 | double rA; /* Real value of left operand */ |
| 64099 | double rB; /* Real value of right operand */ |
| @@ -65194,10 +65195,11 @@ | |
| 65195 | case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */ |
| 65196 | case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */ |
| 65197 | case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */ |
| 65198 | case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ |
| 65199 | #if 0 /* local variables moved into u.ah */ |
| 65200 | char bIntint; /* Started out as two integer operands */ |
| 65201 | int flags; /* Combined MEM_* flags from both inputs */ |
| 65202 | i64 iA; /* Integer value of left operand */ |
| 65203 | i64 iB; /* Integer value of right operand */ |
| 65204 | double rA; /* Real value of left operand */ |
| 65205 | double rB; /* Real value of right operand */ |
| @@ -65211,10 +65213,11 @@ | |
| 65213 | u.ah.flags = pIn1->flags | pIn2->flags; |
| 65214 | if( (u.ah.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null; |
| 65215 | if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){ |
| 65216 | u.ah.iA = pIn1->u.i; |
| 65217 | u.ah.iB = pIn2->u.i; |
| 65218 | u.ah.bIntint = 1; |
| 65219 | switch( pOp->opcode ){ |
| 65220 | case OP_Add: if( sqlite3AddInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65221 | case OP_Subtract: if( sqlite3SubInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65222 | case OP_Multiply: if( sqlite3MulInt64(&u.ah.iB,u.ah.iA) ) goto fp_math; break; |
| 65223 | case OP_Divide: { |
| @@ -65231,10 +65234,11 @@ | |
| 65234 | } |
| 65235 | } |
| 65236 | pOut->u.i = u.ah.iB; |
| 65237 | MemSetTypeFlag(pOut, MEM_Int); |
| 65238 | }else{ |
| 65239 | u.ah.bIntint = 0; |
| 65240 | fp_math: |
| 65241 | u.ah.rA = sqlite3VdbeRealValue(pIn1); |
| 65242 | u.ah.rB = sqlite3VdbeRealValue(pIn2); |
| 65243 | switch( pOp->opcode ){ |
| 65244 | case OP_Add: u.ah.rB += u.ah.rA; break; |
| @@ -65262,11 +65266,11 @@ | |
| 65266 | if( sqlite3IsNaN(u.ah.rB) ){ |
| 65267 | goto arithmetic_result_is_null; |
| 65268 | } |
| 65269 | pOut->r = u.ah.rB; |
| 65270 | MemSetTypeFlag(pOut, MEM_Real); |
| 65271 | if( (u.ah.flags & MEM_Real)==0 && !u.ah.bIntint ){ |
| 65272 | sqlite3VdbeIntegerAffinity(pOut); |
| 65273 | } |
| 65274 | #endif |
| 65275 | } |
| 65276 | break; |
| @@ -66011,12 +66015,10 @@ | |
| 66015 | |
| 66016 | /* Opcode: Once P1 P2 * * * |
| 66017 | ** |
| 66018 | ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise, |
| 66019 | ** set the flag and fall through to the next instruction. |
| 66020 | */ |
| 66021 | case OP_Once: { /* jump */ |
| 66022 | assert( pOp->p1<p->nOnceFlag ); |
| 66023 | if( p->aOnceFlag[pOp->p1] ){ |
| 66024 | pc = pOp->p2-1; |
| 66025 |
+1
-1
| --- src/sqlite3.h | ||
| +++ src/sqlite3.h | ||
| @@ -107,11 +107,11 @@ | ||
| 107 | 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | 109 | */ |
| 110 | 110 | #define SQLITE_VERSION "3.7.15" |
| 111 | 111 | #define SQLITE_VERSION_NUMBER 3007015 |
| 112 | -#define SQLITE_SOURCE_ID "2012-12-08 22:14:29 92c9ab56b1c67b9468bec57ab1d2c483a69a2810" | |
| 112 | +#define SQLITE_SOURCE_ID "2012-12-10 22:19:14 bd7aeeb691fee69dd6a562138a7aba8e8e192272" | |
| 113 | 113 | |
| 114 | 114 | /* |
| 115 | 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | 117 | ** |
| 118 | 118 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -107,11 +107,11 @@ | |
| 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | */ |
| 110 | #define SQLITE_VERSION "3.7.15" |
| 111 | #define SQLITE_VERSION_NUMBER 3007015 |
| 112 | #define SQLITE_SOURCE_ID "2012-12-08 22:14:29 92c9ab56b1c67b9468bec57ab1d2c483a69a2810" |
| 113 | |
| 114 | /* |
| 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | ** |
| 118 |
| --- src/sqlite3.h | |
| +++ src/sqlite3.h | |
| @@ -107,11 +107,11 @@ | |
| 107 | ** [sqlite3_libversion_number()], [sqlite3_sourceid()], |
| 108 | ** [sqlite_version()] and [sqlite_source_id()]. |
| 109 | */ |
| 110 | #define SQLITE_VERSION "3.7.15" |
| 111 | #define SQLITE_VERSION_NUMBER 3007015 |
| 112 | #define SQLITE_SOURCE_ID "2012-12-10 22:19:14 bd7aeeb691fee69dd6a562138a7aba8e8e192272" |
| 113 | |
| 114 | /* |
| 115 | ** CAPI3REF: Run-Time Library Version Numbers |
| 116 | ** KEYWORDS: sqlite3_version, sqlite3_sourceid |
| 117 | ** |
| 118 |