From: drh Date: Wed, 3 Mar 2004 01:51:24 +0000 (+0000) Subject: A vdbe stack element might have a string value even after a call to X-Git-Tag: version-3.6.10~4785 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=79f14b72408d6d195ed64ac9e8edb20357aac9ce;p=thirdparty%2Fsqlite.git A vdbe stack element might have a string value even after a call to Integerify(). Ticket #641. (CVS 1283) FossilOrigin-Name: 3cac4b7b526d6c5dbf394009b534707bcb65b0da --- diff --git a/manifest b/manifest index 8465fa4fba..5747c954e6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\ssure\sa\sLIMIT\sclause\son\sa\sSELECT\scleans\sup\sthe\svdbe\sstack\sso\sthat\sif\sit\noccurs\sinside\sa\strigger,\sit\swon't\scause\sa\sstack\soverflow.\s\sTicket\s#640.\s(CVS\s1282) -D 2004-03-02T18:37:41 +C A\svdbe\sstack\selement\smight\shave\sa\sstring\svalue\seven\safter\sa\scall\sto\nIntegerify().\s\sTicket\s#641.\s(CVS\s1283) +D 2004-03-03T01:51:25 F Makefile.in afc6c0377773421633e592347097ad036eef6aeb F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -61,7 +61,7 @@ F src/trigger.c a9927b57c865b6f3df3fb5e40c9824d722660ded F src/update.c 4c50328ebc127852bde8e2950eb8933234802c21 F src/util.c 122bc174f6c8c2eb6a9127d9f13c4c74f83b85e4 F src/vacuum.c db5f58cb53c8c79169d74bc0413e6d7e185ac532 -F src/vdbe.c af187d86cb1bcc1ead227245350d1693c28c77a2 +F src/vdbe.c 7c33f761fdc799633468766fb53eda4301daa6b3 F src/vdbe.h ac987945e4dd6f987bca534c6005899f089fc270 F src/vdbeInt.h b40ff02ce39fd076e6ff3369e19c1bbfe1986682 F src/vdbeaux.c e2cdd1ab63604a390612c73e26bdd2ef910e9438 @@ -85,7 +85,7 @@ F test/copy.test f07ea8d60878da7a67416ab62f78e9706b9d3c45 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2 F test/date.test aed5030482ebc02bd8d386c6c86a29f694ab068d F test/delete.test 92256384f1801760180ded129f7427884cf28886 -F test/expr.test c4cc292d601019c2f2ce95093caaa5d10284b105 +F test/expr.test ad985242e140f87eeef329d98257b8369a2066dc F test/fkey1.test d65c824459916249bee501532d6154ddab0b5db7 F test/format3.test 149cc166c97923fa60def047e90dd3fb32bba916 F test/func.test 000515779001ac6899eec4b54e65c6e2501279d4 @@ -188,7 +188,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 -P 76d42921a475c531a77677c3fe73b6da265a878d -R dd8609f48345c006180d07e7ef0d5734 +P 5aaa2939baa972231def086ed5f9d9ba63302532 +R d722781e30098df56cdb3e08d2d9a7bf U drh -Z d1aff38fcd9f7647a8267e5f4641096b +Z b4ad96d33af4159614ecafeca0eb02b2 diff --git a/manifest.uuid b/manifest.uuid index 5609352d26..3ebffecc13 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5aaa2939baa972231def086ed5f9d9ba63302532 \ No newline at end of file +3cac4b7b526d6c5dbf394009b534707bcb65b0da \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index bbbf940461..0d3fb43e6f 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.267 2004/02/22 17:49:34 drh Exp $ +** $Id: vdbe.c,v 1.268 2004/03/03 01:51:25 drh Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -1179,8 +1179,9 @@ case OP_ShiftRight: { assert( (pTos->flags & MEM_Dyn)==0 ); assert( (pNos->flags & MEM_Dyn)==0 ); pTos--; + Release(pTos); pTos->i = a; - assert( pTos->flags==MEM_Int ); + pTos->flags = MEM_Int; break; } @@ -1700,8 +1701,9 @@ case OP_Not: { assert( pTos>=p->aStack ); if( pTos->flags & MEM_Null ) break; /* Do nothing to NULLs */ Integerify(pTos); - assert( pTos->flags==MEM_Int ); + Release(pTos); pTos->i = !pTos->i; + pTos->flags = MEM_Int; break; } @@ -1715,8 +1717,9 @@ case OP_BitNot: { assert( pTos>=p->aStack ); if( pTos->flags & MEM_Null ) break; /* Do nothing to NULLs */ Integerify(pTos); - assert( pTos->flags==MEM_Int ); + Release(pTos); pTos->i = ~pTos->i; + pTos->flags = MEM_Int; break; } @@ -2299,7 +2302,7 @@ case OP_SetCookie: { aMeta[1+pOp->p2] = pTos->i; rc = sqliteBtreeUpdateMeta(db->aDb[pOp->p1].pBt, aMeta); } - assert( pTos->flags==MEM_Int ); + Release(pTos); pTos--; break; } @@ -3767,7 +3770,7 @@ case OP_ListWrite: { } Integerify(pTos); pKeylist->aKey[pKeylist->nUsed++] = pTos->i; - assert( pTos->flags==MEM_Int ); + Release(pTos); pTos--; break; } diff --git a/test/expr.test b/test/expr.test index 0d0c6e2aec..be91a74813 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.30 2003/09/30 01:54:15 drh Exp $ +# $Id: expr.test,v 1.31 2004/03/03 01:51:25 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -68,7 +68,9 @@ test_expr expr-1.39 {i1=1} {+i1} {1} test_expr expr-1.40 {i1=1, i2=2} {+(i2+i1)} {3} test_expr expr-1.41 {i1=1, i2=2} {-(i2+i1)} {-3} test_expr expr-1.42 {i1=1, i2=2} {i1|i2} {3} +test_expr expr-1.42b {i1=1, i2=2} {4|2} {6} test_expr expr-1.43 {i1=1, i2=2} {i1&i2} {0} +test_expr expr-1.43b {i1=1, i2=2} {4&5} {4} test_expr expr-1.44 {i1=1} {~i1} {-2} test_expr expr-1.45 {i1=1, i2=3} {i1<>i2} {4}