diff options
author | drh <drh@noemail.net> | 2016-11-30 14:47:37 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2016-11-30 14:47:37 +0000 |
commit | 77320ea48d30d7fb85756ca642f80d4d54307cfe (patch) | |
tree | 6c9034d8b137cdccd4d7f600248447c64ca84c19 /src/expr.c | |
parent | ab5be2e651b6bbc7f979d921aefcafede3439ade (diff) | |
download | sqlite-77320ea48d30d7fb85756ca642f80d4d54307cfe.tar.gz sqlite-77320ea48d30d7fb85756ca642f80d4d54307cfe.zip |
Fix then handling of the (oversized) integer literal -0x8000000000000000.
FossilOrigin-Name: 3816bb415ecfd4f36430d0fcbc878e382975de60
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/expr.c b/src/expr.c index 2f7deeea9..1ad166777 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2942,22 +2942,22 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ const char *z = pExpr->u.zToken; assert( z!=0 ); c = sqlite3DecOrHexToI64(z, &value); - if( c==0 || (c==2 && negFlag) ){ - if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; } - sqlite3VdbeAddOp4Dup8(v, OP_Int64, 0, iMem, 0, (u8*)&value, P4_INT64); - }else{ + if( c==1 || (c==2 && !negFlag) || (negFlag && value==SMALLEST_INT64)){ #ifdef SQLITE_OMIT_FLOATING_POINT sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z); #else #ifndef SQLITE_OMIT_HEX_INTEGER if( sqlite3_strnicmp(z,"0x",2)==0 ){ - sqlite3ErrorMsg(pParse, "hex literal too big: %s", z); + sqlite3ErrorMsg(pParse, "hex literal too big: %s%s", negFlag?"-":"",z); }else #endif { codeReal(v, z, negFlag, iMem); } #endif + }else{ + if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; } + sqlite3VdbeAddOp4Dup8(v, OP_Int64, 0, iMem, 0, (u8*)&value, P4_INT64); } } } |