Have sqlite3_blob_bytes() return 0 following a failed call to sqlite3_reopen_blob().

FossilOrigin-Name: 476a8b492124d31e0656e61a6183ab55684c0bdf
diff --git a/manifest b/manifest
index 00ab12a..0023d3d 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/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/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/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/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 20be0ec..8b6746b 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 5b67b7a..240a3ba 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -4835,7 +4835,8 @@
 ** 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 f43fc64..f26cc87 100644
--- a/src/vdbeblob.c
+++ b/src/vdbeblob.c
@@ -419,7 +419,7 @@
 */
 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 @@
   }
 
   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 c2a9752..4c49f15 100644
--- a/test/incrblob3.test
+++ b/test/incrblob3.test
@@ -92,8 +92,11 @@
   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.