From: drh Date: Sat, 5 Mar 2011 13:54:15 +0000 (+0000) Subject: Fix an instance of signed arithmetic overflow and an one bit-shift overflow. X-Git-Tag: version-3.7.6~120 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cfd654bf2a3a2f546a3a4507ca196be97f2a37a1;p=thirdparty%2Fsqlite.git Fix an instance of signed arithmetic overflow and an one bit-shift overflow. Mark six other signed arithmetic overflow locations that need fixing. FossilOrigin-Name: 04abab71ecd52f6070b9f84781a3df3d6dba7722 --- diff --git a/install-sh b/install-sh old mode 100755 new mode 100644 diff --git a/manifest b/manifest index fe1dc68240..e8bdbb82a6 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,8 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Do\sa\sbetter\sjob\sof\schoosing\sthe\sjoin\stable\sorder\swhen\sthe\stables\shaving\nvery\sdifferent\snumbers\sof\srows. -D 2011-03-04T00:56:58.067 +C Fix\san\sinstance\sof\ssigned\sarithmetic\soverflow\sand\san\sone\sbit-shift\soverflow.\nMark\ssix\sother\ssigned\sarithmetic\soverflow\slocations\sthat\sneed\sfixing. +D 2011-03-05T13:54:15.956 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -102,7 +102,7 @@ F ext/rtree/rtree_util.tcl 06aab2ed5b826545bf215fff90ecb9255a8647ea F ext/rtree/sqlite3rtree.h 1af0899c63a688e272d69d8e746f24e76f10a3f0 F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024 -F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x +F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F main.mk 54190fab7cdba523e311c274c95ea480f32abfb5 F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a @@ -133,10 +133,10 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 7deec4534f3b5a0c3b4a4cbadf809d321f64f9c4 F src/date.c 1548fdac51377e4e7833251de878b4058c148e1b F src/delete.c 7ed8a8c8b5f748ece92df173d7e0f7810c899ebd -F src/expr.c 8e2c607b3be87a35c75a1f5dac50c10666b083c0 +F src/expr.c 0afd6a93d95614e57b29d1c6da5f74be5a4d4fbd F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 17950a28f28b23e8ad3feaac5fc88c324d2f600a -F src/func.c cb41f614edc43b00bfeb030f9768e80eaff47edd +F src/func.c 9b88e09d238eecdb6242bd387901e6d9f7f64531 F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970 @@ -175,7 +175,7 @@ F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050 F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e F src/pragma.c a83f320497aee18eda60fc8d854df5897906c2b1 F src/prepare.c 395b3fab1b93f45b6aa194b23ebc201221c47b99 -F src/printf.c df2ff3bb5409e8958136933342c46464fbd017e7 +F src/printf.c 6eb5c70b531464cca4254e70aaafdf2e7da3a743 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 @@ -229,15 +229,15 @@ F src/test_vfs.c 2ed8853c1e51ac6f9ea091f7ce4e0d618bba8b86 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/tokenize.c 604607d6813e9551cf5189d899e0a25c12681080 F src/trigger.c b8bedb9c0084ceb51a40f54fcca2ce048c8de852 -F src/update.c 227e6cd512108b84f69421fc6c7aa1b83d60d6e0 +F src/update.c c40aedd40baf460806f1c9f2cbe4a1dac445ee91 F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685 -F src/util.c ab1c92426494f499f42b9e307537b03e923d75c1 +F src/util.c 77572d1f37c5b319d9e735c745349304791f7ba5 F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f -F src/vdbe.c 34305497d81daafdb1e500bfaa21d044c64503de +F src/vdbe.c 953d44f0fbd72bf73a278c10e7bdd9164235260d F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 F src/vdbeInt.h 6e6f28e9bccc6c703dca1372fd661c57b5c15fb0 F src/vdbeapi.c 8e9324fd35eb70d0b5904bd1af40f2598744dc4d -F src/vdbeaux.c 5936a596324ad9f9aba02bdee8c8080d2a3264e1 +F src/vdbeaux.c 3ce2588ffe921e457d00baee7dd409afabe8c8af F src/vdbeblob.c 18955f0ee6b133cd08e1592010cb9a6b11e9984c F src/vdbemem.c 0fa2ed786cd207d5b988afef3562a8e663a75b50 F src/vdbetrace.c 3ba13bc32bdf16d2bdea523245fd16736bed67b5 @@ -602,7 +602,7 @@ F test/permutations.test 5b2a4cb756ffb2407cb4743163668d1d769febb6 F test/pragma.test fdfc09067ea104a0c247a1a79d8093b56656f850 F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47 F test/printf.test 05970cde31b1a9f54bd75af60597be75a5c54fea -F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301 +F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301 x F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc F test/quick.test 1681febc928d686362d50057c642f77a02c62e57 F test/quota.test ddafe133653093eb9a99ccd6264884ae43f9c9b8 @@ -889,7 +889,7 @@ F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5 F tool/lemon.c dfd81a51b6e27e469ba21d01a75ddf092d429027 F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc F tool/mkkeywordhash.c d2e6b4a5965e23afb80fbe74bb54648cd371f309 -F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e +F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e x F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 F tool/mksqlite3c.tcl cf44512a48112b1ba09590548660a5a6877afdb3 F tool/mksqlite3h.tcl d76c226a5e8e1f3b5f6593bcabe5e98b3b1ec9ff @@ -914,14 +914,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P c6532b35cc5a81cc753a22e0165bfdd5143941f1 -R a3d7e872cd52f3bb8cff4bf51476ab7a +P 952f5e8c69904c48f2decfabf8ea60a2e9f3e134 +R c0946fb5d31ae3d41275b61febc12359 U drh -Z 87aba3dd3051578a2e8c32390f315773 +Z 4b81d66afc295ddd153d99c651678bf2 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFNcDjeoxKgR168RlERAn2TAJ9XKohvD0kx5t1CAQmiI1sUD+1b8QCdFh0P -RilThkZz6kdLZmkRZY4ir5s= -=inuw +iD8DBQFNckCLoxKgR168RlERAq5MAJwIkQItYpj2jIMbedpVkYZIN7SirACePysg +Jf8UO88YpxqtY86joGQ7FqQ= +=f5iN -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index b5f246c15a..ad8d2b9252 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -952f5e8c69904c48f2decfabf8ea60a2e9f3e134 \ No newline at end of file +04abab71ecd52f6070b9f84781a3df3d6dba7722 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index b7b73946cd..57243c74e8 100644 --- a/src/expr.c +++ b/src/expr.c @@ -1964,7 +1964,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8); if( c==0 || (c==2 && negFlag) ){ char *zV; - if( negFlag ){ value = -value; } + if( negFlag ){ value = -value; } /* CLANG */ zV = dup8bytes(v, (char*)&value); sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64); }else{ diff --git a/src/func.c b/src/func.c index 19c6d22510..2f21ac0e3d 100644 --- a/src/func.c +++ b/src/func.c @@ -1240,7 +1240,7 @@ static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){ i64 v = sqlite3_value_int64(argv[0]); p->rSum += v; if( (p->approx|p->overflow)==0 ){ - i64 iNewSum = p->iSum + v; + i64 iNewSum = p->iSum + v; /* CLANG */ int s1 = (int)(p->iSum >> (sizeof(i64)*8-1)); int s2 = (int)(v >> (sizeof(i64)*8-1)); int s3 = (int)(iNewSum >> (sizeof(i64)*8-1)); diff --git a/src/printf.c b/src/printf.c index c88bb30006..21b6c0e11a 100644 --- a/src/printf.c +++ b/src/printf.c @@ -400,7 +400,7 @@ void sqlite3VXPrintf( v = va_arg(ap,int); } if( v<0 ){ - longvalue = -v; + longvalue = -v; /* CLANG */ prefix = '-'; }else{ longvalue = v; diff --git a/src/update.c b/src/update.c index 8bf58d7666..045b4d176d 100644 --- a/src/update.c +++ b/src/update.c @@ -396,7 +396,7 @@ void sqlite3Update( pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError ); for(i=0; inCol; i++){ - if( aXRef[i]<0 || oldmask==0xffffffff || (oldmask & (1<='0' && c<='9'; i+=incr){ - v = v*10 + c - '0'; + v = v*10 + c - '0'; /* CLANG */ } - *pNum = neg ? -v : v; + *pNum = neg ? -v : v; /* CLANG */ testcase( i==18 ); testcase( i==19 ); testcase( i==20 ); diff --git a/src/vdbe.c b/src/vdbe.c index 00ed1438b5..3a7397687b 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -1246,7 +1246,7 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ iA = pIn1->u.i; iB = pIn2->u.i; switch( pOp->opcode ){ - case OP_Add: iB += iA; break; + case OP_Add: iB += iA; break; /* CLANG */ case OP_Subtract: iB -= iA; break; case OP_Multiply: iB *= iA; break; case OP_Divide: { diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 64ff489919..4a1b1efbb2 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -2497,7 +2497,13 @@ u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){ if( file_format>=4 && (i&1)==i ){ return 8+(u32)i; } - u = i<0 ? -i : i; + if( i<0 ){ + if( i<(-MAX_6BYTE) ) return 6; + /* Previous test prevents: u = -(-9223372036854775808) */ + u = -i; + }else{ + u = i; + } if( u<=127 ) return 1; if( u<=32767 ) return 2; if( u<=8388607 ) return 3; diff --git a/test/progress.test b/test/progress.test old mode 100644 new mode 100755 diff --git a/tool/mkopts.tcl b/tool/mkopts.tcl old mode 100644 new mode 100755