aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2016-11-30 14:47:37 +0000
committerdrh <drh@noemail.net>2016-11-30 14:47:37 +0000
commit77320ea48d30d7fb85756ca642f80d4d54307cfe (patch)
tree6c9034d8b137cdccd4d7f600248447c64ca84c19 /src/expr.c
parentab5be2e651b6bbc7f979d921aefcafede3439ade (diff)
downloadsqlite-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.c10
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);
}
}
}