]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
When sqlite3_create_collation is called with an invalid encoding, return
authordrh <drh@noemail.net>
Mon, 7 Jul 2008 17:53:07 +0000 (17:53 +0000)
committerdrh <drh@noemail.net>
Mon, 7 Jul 2008 17:53:07 +0000 (17:53 +0000)
SQLITE_MISUSE. (CVS 5354)

FossilOrigin-Name: eae4105d8a162ba80ca6fde40ae24fdc6c3eccdf

manifest
manifest.uuid
src/main.c
src/sqlite.h.in
src/test1.c

index 43072a82e6c1271970c4dcc5f98a28bae5e0b215..5b1e1ff6c933e87c8bbc7efabfdfffa7894657ef 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\san\serror\schecked\sin\sas\spart\sof\s(5350).\s(CVS\s5353)
-D 2008-07-07T17:13:09
+C When\ssqlite3_create_collation\sis\scalled\swith\san\sinvalid\sencoding,\sreturn\nSQLITE_MISUSE.\s(CVS\s5354)
+D 2008-07-07T17:53:08
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 325dfac0a0dd1cb4d975f1ace6453157892e6042
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -114,7 +114,7 @@ F src/insert.c 9af927a81fdc99624130dc83722b3ab6364035a6
 F src/journal.c cffd2cd214e58c0e99c3ff632b3bee6c7cbb260e
 F src/legacy.c 3626c71fb70912abec9a4312beba753a9ce800df
 F src/loadext.c 40024a0f476c1279494876b9a002001b29e5d3e3
-F src/main.c b3c4cb43fc0ea3248dcc7ec64ffeb2754b0abe5a
+F src/main.c 1fa8697b91666b5865a86f5aa143b0075800a1d3
 F src/malloc.c f52166df8abd7ff6990dbee1a0ce3534addc8617
 F src/md5.c 008216bbb5d34c6fbab5357aa68575ad8a31516a
 F src/mem1.c 8340fa5f969e9f9b9bdeb54106457a2003456d2b
@@ -142,14 +142,14 @@ F src/printf.c 8b063da9dcde26b7c500a01444b718d86f21bc6e
 F src/random.c 5c754319d38abdd6acd74601ee0105504adc508a
 F src/select.c 3e44f3910660ab63c690d2a4eac5449ae48ce96b
 F src/shell.c 484e7297e066f22830f9c15d7abbcdd2acb097b0
-F src/sqlite.h.in 76c144d23f8824e8811e837e9396b9f1361f5902
+F src/sqlite.h.in 866842b5daae9bf95b0e79cb4d92518f78179dca
 F src/sqlite3ext.h 1e3887c9bd3ae66cb599e922824b04cd0d0f2c3e
 F src/sqliteInt.h 35e420ced9e27af5ee387cd40f2e7a431665f858
 F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8
 F src/status.c 6cb10377992505bd69f1ca1d75c1240a65f25a58
 F src/table.c 1fa8f8113ac9cbc09ae4801c6d2a7f0af82c5822
 F src/tclsqlite.c 4dd9ee4cb44846ad9bcc4d0da8088c1e7d4b33d9
-F src/test1.c 0a399f36f3b9a4514cfdd44d307c5271488a53e2
+F src/test1.c 92fcc114c60ea9c1c41437db43cfc5a920e7402a
 F src/test2.c c46d146019ab6e37474e66b3c789e5237d9ea7b7
 F src/test3.c 01ff03164cf6a2bededa3b44ecd481603e2644fc
 F src/test4.c ff4ecde3cafc71337b04e8cb7da5bb88e85d70e7
@@ -598,7 +598,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 38e04d67635d49661f9b95338fc1cb8197bf0bc7
-R 78060972ae886eae791f694f62a0db49
-U danielk1977
-Z 7cfb7b4d0ecbf47a8d1f1b2a4da8cfc3
+P acfb2b41ae66307ba80b6245aced9cc1d8092189
+R 847cfc5b52ddb522dcd4cc35ae7605db
+U drh
+Z 70baa66de932a9ed85bb20bf469edd2a
index 3b5ccbf0a69a940d05c6f07d6bba53acd1114193..ed4e8becc5cdfb7d1624d231724794360e2b2337 100644 (file)
@@ -1 +1 @@
-acfb2b41ae66307ba80b6245aced9cc1d8092189
\ No newline at end of file
+eae4105d8a162ba80ca6fde40ae24fdc6c3eccdf
\ No newline at end of file
index cfeff0c6e3ec75ae67b555263e9a24ef188c17e4..5fb9c229de65329e608f0895350812f2739cbb02 100644 (file)
@@ -14,7 +14,7 @@
 ** other files are for internal use by SQLite and should not be
 ** accessed by users of the library.
 **
-** $Id: main.c,v 1.467 2008/07/07 14:50:14 drh Exp $
+** $Id: main.c,v 1.468 2008/07/07 17:53:08 drh Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -999,7 +999,7 @@ const char *sqlite3_errmsg(sqlite3 *db){
   if( !db ){
     return sqlite3ErrStr(SQLITE_NOMEM);
   }
-  if( !sqlite3SafetyCheckSickOrOk(db) || db->errCode==SQLITE_MISUSE ){
+  if( !sqlite3SafetyCheckSickOrOk(db) ){
     return sqlite3ErrStr(SQLITE_MISUSE);
   }
   sqlite3_mutex_enter(db->mutex);
@@ -1042,7 +1042,7 @@ const void *sqlite3_errmsg16(sqlite3 *db){
   if( !db ){
     return (void *)(&outOfMemBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
   }
-  if( !sqlite3SafetyCheckSickOrOk(db) || db->errCode==SQLITE_MISUSE ){
+  if( !sqlite3SafetyCheckSickOrOk(db) ){
     return (void *)(&misuseBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);
   }
   sqlite3_mutex_enter(db->mutex);
@@ -1103,10 +1103,8 @@ static int createCollation(
   if( enc2==SQLITE_UTF16 ){
     enc2 = SQLITE_UTF16NATIVE;
   }
-
   if( (enc2&~3)!=0 ){
-    sqlite3Error(db, SQLITE_ERROR, "unknown encoding");
-    return SQLITE_ERROR;
+    return SQLITE_MISUSE;
   }
 
   /* Check if this call is removing or replacing an existing collation 
index 4e0334ad54ecb0a8b09ee8871d398d50fabe7c3a..9bca7ebf2617db5dd18c846b079de8b4252f241f 100644 (file)
@@ -30,7 +30,7 @@
 ** the version number) and changes its name to "sqlite3.h" as
 ** part of the build process.
 **
-** @(#) $Id: sqlite.h.in,v 1.362 2008/06/28 11:23:00 danielk1977 Exp $
+** @(#) $Id: sqlite.h.in,v 1.363 2008/07/07 17:53:08 drh Exp $
 */
 #ifndef _SQLITE3_H_
 #define _SQLITE3_H_
@@ -2433,6 +2433,10 @@ int sqlite3_open_v2(
 ** However, the error string might be overwritten or deallocated by
 ** subsequent calls to other SQLite interface functions.
 **
+** If an interface fails with SQLITE_MISUSE, that means the interface
+** was invoked incorrectly by the application.  In that case, the
+** error code and message may or may not be set.
+**
 ** INVARIANTS:
 **
 ** {F12801} The [sqlite3_errcode(D)] interface returns the numeric
index 28b625e5dd01955dfb855b7632bba70770efb89b..1baa8073fd2f803d2ca70fc7f219fa2855aa6323 100644 (file)
@@ -13,7 +13,7 @@
 ** is not included in the SQLite library.  It is used for automated
 ** testing of the SQLite library.
 **
-** $Id: test1.c,v 1.310 2008/07/07 14:50:14 drh Exp $
+** $Id: test1.c,v 1.311 2008/07/07 17:53:08 drh Exp $
 */
 #include "sqliteInt.h"
 #include "tcl.h"
@@ -1665,6 +1665,7 @@ static int test_create_collation_v2(
 ){
   TestCollationX *p;
   sqlite3 *db;
+  int rc;
 
   if( objc!=5 ){
     Tcl_WrongNumArgs(interp, 1, objv, "DB-HANDLE NAME CMP-PROC DEL-PROC");
@@ -1679,7 +1680,15 @@ static int test_create_collation_v2(
   Tcl_IncrRefCount(p->pCmp);
   Tcl_IncrRefCount(p->pDel);
 
-  sqlite3_create_collation_v2(db, Tcl_GetString(objv[2]), SQLITE_UTF8, 
+  rc = sqlite3_create_collation_v2(db, Tcl_GetString(objv[2]), 16, 
+      (void *)p, testCreateCollationCmp, testCreateCollationDel
+  );
+  if( rc!=SQLITE_MISUSE ){
+    Tcl_AppendResult(interp, "sqlite3_create_collate_v2() failed to detect "
+      "an invalid encoding", (char*)0);
+    return TCL_ERROR;
+  }
+  rc = sqlite3_create_collation_v2(db, Tcl_GetString(objv[2]), SQLITE_UTF8, 
       (void *)p, testCreateCollationCmp, testCreateCollationDel
   );
   return TCL_OK;