From: dan Date: Mon, 6 Dec 2010 17:11:05 +0000 (+0000) Subject: Have sqlite3_blob_bytes() return 0 following a failed call to sqlite3_reopen_blob(). X-Git-Tag: version-3.7.4~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eefab7512bfe4d43b3f868d80e3818aa61db01bc;p=thirdparty%2Fsqlite.git Have sqlite3_blob_bytes() return 0 following a failed call to sqlite3_reopen_blob(). FossilOrigin-Name: 476a8b492124d31e0656e61a6183ab55684c0bdf --- diff --git a/manifest b/manifest index 00ab12a12c..0023d3d641 100644 --- a/manifest +++ b/manifest @@ -1,8 +1,5 @@ ------BEGIN PGP SIGNED MESSAGE----- -Hash: SHA1 - -C Version\s3.7.4\srelease\scandidate\s2. -D 2010-12-04T19:35:04 +C Have\ssqlite3_blob_bytes()\sreturn\s0\sfollowing\sa\sfailed\scall\sto\ssqlite3_reopen_blob(). +D 2010-12-06T17:11:06 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 4547616ad2286053af6ccccefa242dc925e49bf0 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -179,7 +176,7 @@ F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c 8a7ba246b0b4bb45df7fbc52681728a0e3deaaa7 F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056 -F src/sqlite.h.in e6e87d10e6a3756b8c7e9a11703716b6a1575a40 +F src/sqlite.h.in b7e8a4e4749cfae9c99e1fbe3f9f87763cbbf7a2 F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754 F src/sqliteInt.h 5cfee93885789f174df186409b81812ee189e44f F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44 @@ -236,7 +233,7 @@ F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 F src/vdbeInt.h 1f2137b905969f4de0648256aeb73abdf88f9213 F src/vdbeapi.c fb0036185b3c56e15916a5ee96309cd4acf6818f F src/vdbeaux.c b810a66902ee40c71cdb9c64f43760da516c91df -F src/vdbeblob.c e0ce3c54cc0c183af2ec67b63a289acf92251df4 +F src/vdbeblob.c 18955f0ee6b133cd08e1592010cb9a6b11e9984c F src/vdbemem.c 411649a35686f54268ccabeda175322c4697f5a6 F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2 F src/vtab.c b297e8fa656ab5e66244ab15680d68db0adbec30 @@ -475,7 +472,7 @@ F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0 F test/in4.test 64f3cc1acde1b9161ccdd8e5bde3daefdb5b2617 F test/incrblob.test 76e787ca3301d9bfa6906031c626d26f8dd707de F test/incrblob2.test edc3a96e557bd61fb39acc8d2edd43371fbbaa19 -F test/incrblob3.test 3fed76bd79df7049ec696de96632c1ede699ea27 +F test/incrblob3.test aedbb35ea1b6450c33b98f2b6ed98e5020be8dc7 F test/incrblob_err.test c577c91d4ed9e8336cdb188b15d6ee2a6fe9604e F test/incrblobfault.test 917c0292224c64a56ef7215fd633a3a82f805be0 F test/incrvacuum.test 453d1e490d8f5ad2c9b3a54282a0690d6ae56462 @@ -896,14 +893,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P 507027b70f71689f77dee3e849ebc66a1c4c3166 -R 269151d064cbf251d3b04ce94d96a176 -U drh -Z 44acfd13da8d338249a74453416724fe ------BEGIN PGP SIGNATURE----- -Version: GnuPG v1.4.6 (GNU/Linux) - -iD8DBQFM+pfroxKgR168RlERAh2OAJ4gpQpjJ0XbSVxG7vvPK96lMgRkDgCfTiYU -Vw03RsdoJ+YpZFKTZVXMr3I= -=HitG ------END PGP SIGNATURE----- +P 40756fe1f109da8bccac0ca28f05435792c62f81 +R 9dde255cce61a1834cdbed408450c15b +U dan +Z 640d6067fd568f45a0bb580334c25ddc diff --git a/manifest.uuid b/manifest.uuid index 20be0ec6c2..8b6746b353 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -40756fe1f109da8bccac0ca28f05435792c62f81 \ No newline at end of file +476a8b492124d31e0656e61a6183ab55684c0bdf \ No newline at end of file diff --git a/src/sqlite.h.in b/src/sqlite.h.in index 5b67b7abd4..240a3bab22 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -4835,7 +4835,8 @@ int sqlite3_blob_open( ** SQLite error code is returned and the blob handle is considered aborted. ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return -** SQLITE_ABORT. +** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle +** always returns zero. ** ** ^This function sets the database handle error code and message. */ diff --git a/src/vdbeblob.c b/src/vdbeblob.c index f43fc64995..f26cc87ea8 100644 --- a/src/vdbeblob.c +++ b/src/vdbeblob.c @@ -419,7 +419,7 @@ int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){ */ int sqlite3_blob_bytes(sqlite3_blob *pBlob){ Incrblob *p = (Incrblob *)pBlob; - return p ? p->nByte : 0; + return (p && p->pStmt) ? p->nByte : 0; } /* @@ -457,6 +457,7 @@ int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){ } rc = sqlite3ApiExit(db, rc); + assert( rc==SQLITE_OK || p->pStmt==0 ); sqlite3_mutex_leave(db->mutex); return rc; } diff --git a/test/incrblob3.test b/test/incrblob3.test index c2a97521dc..4c49f1563c 100644 --- a/test/incrblob3.test +++ b/test/incrblob3.test @@ -92,8 +92,11 @@ foreach {tn rowid type} { do_test incrblob3-2.2.$tn.5 { list [catch {sqlite3_blob_write $::blob 0 "abcd"} msg] $msg } {1 SQLITE_ABORT} + do_test incrblob3-2.2.$tn.6 { + sqlite3_blob_bytes $::blob + } {0} - do_test incrblob3-2.2.$tn.4 { close $::blob } {} + do_test incrblob3-2.2.$tn.7 { close $::blob } {} } # Test that passing NULL to sqlite3_blob_XXX() APIs returns SQLITE_MISUSE.