From 9051a420d674447d6f0852d0dbbdc4f9e9e9b7f0 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 30 Jan 2006 22:35:43 +0000 Subject: [PATCH] Make sure the 3rd parameter to sqlite3_prepare() is honored. Ticket #1650. (CVS 3040) FossilOrigin-Name: 9d53cc880fd2aa3bd4b4a59f666b57b0b7864e8f --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/prepare.c | 11 +++++++++-- test/capi3.test | 19 ++++++++++++++++++- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/manifest b/manifest index 515c4342f9..0be9c1606b 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Clarify\sthat\sthe\snBytes\sparameter\sto\ssqlite3_prepare\sis\salways\sthe\nnumber\sof\sbytes\sand\snever\sthe\snumber\sof\scharacters.\s\sTicket\s#1646.\s(CVS\s3039) -D 2006-01-30T22:12:31 +C Make\ssure\sthe\s3rd\sparameter\sto\ssqlite3_prepare()\sis\shonored.\s\sTicket\s#1650.\s(CVS\s3040) +D 2006-01-30T22:35:44 F Makefile.in e936c6fc3134838318aa0335a85041e6da31f6ee F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -63,7 +63,7 @@ F src/pager.c c9fdc3f4026f22e73d8fa586c4f58e14129036bb F src/pager.h e0acb095b3ad0bca48f2ab00c87346665643f64f F src/parse.y 4285cd2d0f31a8db4c4d54325f88e500452fa029 F src/pragma.c 4496cc77dc35824e1c978c3d1413b8a5a4c777d3 -F src/prepare.c 9753e8e5876faf806ecce8008ca8e5ed6ef768b7 +F src/prepare.c 40ae23c8aeb641dc7b9bb271eb5e295b815154a7 F src/printf.c c7d6ad9efb71c466305297a448308f467b6e2b6e F src/random.c d40f8d356cecbd351ccfab6eaedd7ec1b54f5261 F src/select.c daee9b20702ba51cf3807fc1b130edd8846e3e48 @@ -132,7 +132,7 @@ F test/btree7.test a6d3b842db22af97dd14b989e90a2fd96066b72f F test/btree8.test fadc112bcbd6a0c622d34c813fc8a648eacf8804 F test/busy.test 0271c854738e23ad76e10d4096a698e5af29d211 F test/capi2.test b9354d6c37e6f8f858c08952ebc9709712581221 -F test/capi3.test e573d6b8b67e8a25aeb471b20ed527a975d43c7d +F test/capi3.test f36912f21457fa713ace874e73f2b54d55d1b9dd F test/capi3b.test 5f0bc94b104e11086b1103b20277e1910f59c7f4 F test/cast.test aabdcb3873bb2f40d855bf63950f6d99a5a196c7 F test/check.test 55ad950d7ad24d6eb3328c54149f90d38a39a962 @@ -349,7 +349,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P 6537b5713a9541ec5712ae2564a801a07f93f4c8 -R 266b57c79998c7761e70c9e0903587ae +P 8efc8c57103cab61bc06842391744bec69c24428 +R 67662a16bac53c6b6882b43161155881 U drh -Z 21899a16ae1af06f390fe8c9764e27e4 +Z 3ce9dce65c4451fa921d25ff4c0e8dad diff --git a/manifest.uuid b/manifest.uuid index 6f4549b864..3a8fd78ed3 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8efc8c57103cab61bc06842391744bec69c24428 \ No newline at end of file +9d53cc880fd2aa3bd4b4a59f666b57b0b7864e8f \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 9cd43308de..16e354f0f4 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -13,7 +13,7 @@ ** interface, and routines that contribute to loading the database schema ** from disk. ** -** $Id: prepare.c,v 1.29 2006/01/25 22:50:38 drh Exp $ +** $Id: prepare.c,v 1.30 2006/01/30 22:35:44 drh Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -530,7 +530,14 @@ int sqlite3_prepare( memset(&sParse, 0, sizeof(sParse)); sParse.db = db; - sqlite3RunParser(&sParse, zSql, &zErrMsg); + if( nBytes>=0 && zSql[nBytes]!=0 ){ + char *zSqlCopy = sqlite3StrNDup(zSql, nBytes); + sqlite3RunParser(&sParse, zSqlCopy, &zErrMsg); + sParse.zTail += zSql - zSqlCopy; + sqliteFree(zSqlCopy); + }else{ + sqlite3RunParser(&sParse, zSql, &zErrMsg); + } if( sqlite3MallocFailed() ){ sParse.rc = SQLITE_NOMEM; diff --git a/test/capi3.test b/test/capi3.test index 67fd56ca5f..21542e5884 100644 --- a/test/capi3.test +++ b/test/capi3.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script testing the callback-free C/C++ API. # -# $Id: capi3.test,v 1.40 2006/01/23 21:37:32 drh Exp $ +# $Id: capi3.test,v 1.41 2006/01/30 22:35:44 drh Exp $ # set testdir [file dirname $argv0] @@ -885,5 +885,22 @@ do_test capi3-14.1 { lappend rc $msg } {1 SQLITE_MISUSE} +# Ticket #1650: Honor the nBytes parameter to sqlite3_prepare. +# +do_test capi3-15.1 { + set sql {SELECT * FROM t2} + set nbytes [string length $sql] + append sql { WHERE a==1} + set STMT [sqlite3_prepare $DB $sql $nbytes TAIL] + sqlite3_step $STMT + sqlite3_column_int $STMT 0 +} {1} +do_test capi3-15.2 { + sqlite3_step $STMT + sqlite3_column_int $STMT 0 +} {2} +do_test capi3-15.3 { + sqlite3_finalize $STMT +} {SQLITE_OK} finish_test -- 2.47.2