From 4b5710e4861ed3f051dff8ec5389e8ff9b1258c7 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Tue, 8 May 2007 13:57:34 +0000 Subject: [PATCH] Avoid evaluating (INT_MIN/-1) with 32 bit signed numbers. It can cause SIGFPE. (CVS 3945) FossilOrigin-Name: 2f186e916c982cde557e0bc1b925b10e6d58f8a1 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbe.c | 8 ++++---- test/expr.test | 5 ++++- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/manifest b/manifest index 5109f7c446..f439ddffef 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Do\snot\scrash\sin\sthe\sinternal\sfunctions\ssqlite_rename_table()\sor\ssqlite_rename_trigger()\sif\sthey\sare\ssomehow\spassed\sunexpected\sinput.\s(CVS\s3944) -D 2007-05-08T12:37:46 +C Avoid\sevaluating\s(INT_MIN/-1)\swith\s32\sbit\ssigned\snumbers.\sIt\scan\scause\sSIGFPE.\s(CVS\s3945) +D 2007-05-08T13:57:34 F Makefile.in 87b200ad9970907f76df734d29dff3d294c10935 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -132,7 +132,7 @@ F src/update.c 3359041db390a8f856d67272f299600e2104f350 F src/utf.c e64a48bc21aa973eb622dd47da87d56a4cdcf528 F src/util.c 5eff5cec4ae43490ca3fb97f10a25aac1a5f9b55 F src/vacuum.c 8bd895d29e7074e78d4e80f948e35ddc9cf2beef -F src/vdbe.c c942cb1882954e029e9788e07b709d12fba7ea47 +F src/vdbe.c 07f70528ed4e51753e4416ed4faac33696e65c04 F src/vdbe.h 0025259af1939fb264a545816c69e4b5b8d52691 F src/vdbeInt.h 77a17f1a8bcbbb660bf4515c78d74280b4e8be5c F src/vdbeapi.c 37d793559390bec8a00c556f651f21b5f9e589af @@ -218,7 +218,7 @@ F test/enc3.test 890508efff6677345e93bf2a8adb0489b30df030 F test/exclusive.test 5bc520ba366ae3d242420af025ab64d465b04706 F test/exclusive2.test f9738964b01e0bc4d4e5e270e347ca162da51799 F test/exclusive3.test 0e49c35b7e7cb8e7280b4ce3f0359d30b207d2ff -F test/expr.test ab21e2fc3613595131efd7d8bbca4b95ed5cc608 +F test/expr.test a0b2bb93da2b191e93b34ee048cc03e0b2d8b6a0 F test/filefmt.test 053b622009fbbb74dd37921ffad374d852c13cd8 F test/fkey1.test dcb4f28eb22d5141f15161d6bdca9a4f58c95729 F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb @@ -485,7 +485,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 031a5915b68ec6827fee38b8b9dc74a9e0e09302 -R 684f1105a6244bfeb0b37e4504ad2edd +P c2f90b465e37ea49c9e44415f6461e4f636bb64f +R 8a94e2639bae1ad4438acf25d1621598 U danielk1977 -Z 3385e5fd0a6de2c3ae5f8b125538d83d +Z 56e204849a8e4b3c180ad14c5310ff41 diff --git a/manifest.uuid b/manifest.uuid index ab16563037..3143f24bd1 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -c2f90b465e37ea49c9e44415f6461e4f636bb64f \ No newline at end of file +2f186e916c982cde557e0bc1b925b10e6d58f8a1 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index 248103c348..0d534504b6 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.609 2007/05/08 12:12:17 drh Exp $ +** $Id: vdbe.c,v 1.610 2007/05/08 13:57:34 danielk1977 Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -1171,9 +1171,9 @@ case OP_Remainder: { /* same as TK_REM, no-push */ break; } default: { - int ia = (int)a; - int ib = (int)b; - if( ia==0.0 ) goto divide_by_zero; + i64 ia = (i64)a; + i64 ib = (i64)b; + if( ia==0 ) goto divide_by_zero; b = ib % ia; break; } diff --git a/test/expr.test b/test/expr.test index 66fba60416..2198539bbe 100644 --- a/test/expr.test +++ b/test/expr.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this file is testing expressions. # -# $Id: expr.test,v 1.53 2007/04/06 02:32:35 drh Exp $ +# $Id: expr.test,v 1.54 2007/05/08 13:57:34 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -135,6 +135,9 @@ test_expr expr-1.101 {i1=0, i2=''} {i1=i2} 0 # test_expr expr-1.102 {i1=40, i2=1} {i2<1} 1 test_expr expr-2.1 {r1=1.23, r2=2.34} {r1+r2} 3.57 test_expr expr-2.2 {r1=1.23, r2=2.34} {r1-r2} -1.11