]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix invalid use of unprotected sqlite3_value objects in the sqldiff utility,
authordrh <drh@noemail.net>
Fri, 9 Nov 2018 23:41:57 +0000 (23:41 +0000)
committerdrh <drh@noemail.net>
Fri, 9 Nov 2018 23:41:57 +0000 (23:41 +0000)
when using the --changeset option.

FossilOrigin-Name: a8d65214a567eb1afd703ee4d09d398247e060a610b46097a726364db2861001

manifest
manifest.uuid
tool/sqldiff.c

index a214cdad39ad3fa861769b7f1ba24454e6f567ed..749239362f1abeb36915a23d0dcdd0baedb81bfc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C When\sa\stable\sis\srenamed\susing\s"ALTER\sTABLE\sRENAME\sTO",\supdate\sany\sREFERENCES\nclauses\sthat\srefer\sto\sthe\stable,\sunless\s"PRAGMA\slegacy_alter_table"\sis\strue\nand\s"PRAGMA\sforeign_keys"\sis\sset\sto\sfalse\s(i.e.\sso\sthat\swhen\s"PRAGMA\nlegacy_alter_table"\sis\sset\sbehaviour\sis\sstill\scompatible\swith\sversions\s3.24\nand\searlier).
-D 2018-11-09T20:04:05.243
+C Fix\sinvalid\suse\sof\sunprotected\ssqlite3_value\sobjects\sin\sthe\ssqldiff\sutility,\nwhen\susing\sthe\s--changeset\soption.
+D 2018-11-09T23:41:57.373
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in edbb6e20bb1decf65f6c64c9e61004a69bdf8afb39cdce5337c916b03dfcd1e3
@@ -1741,7 +1741,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
 F tool/split-sqlite3c.tcl 3efcd4240b738f6bb2b5af0aea7e1e0ef9bc1c61654f645076cec883030b710c
-F tool/sqldiff.c 579d7e4e42c30a963781654c87d2868823120b55d59e16ca77b0edbab0218713
+F tool/sqldiff.c 7b9b7238284f02131dbb8f21a4e862409bff728045c5473139d28c67ac87580e
 F tool/sqlite3_analyzer.c.in 7eeaae8b0d7577662acaabbb11107af0659d1b41bc1dfdd4d91422de27127968
 F tool/sqltclsh.c.in 1bcc2e9da58fadf17b0bf6a50e68c1159e602ce057210b655d50bad5aaaef898
 F tool/sqltclsh.tcl 862f4cf1418df5e1315b5db3b5ebe88969e2a784525af5fbf9596592f14ed848
@@ -1776,7 +1776,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 531eca6104e41e4301fa2cf58bb8fec811da31e151a0f766c93aece5521d235b
-R 3008a464d47aa62c3381b1fbed0d8cef
-U dan
-Z fb8f8ebbdb0cc9c0ada9657c20228c06
+P ae9638e9c0ad0c366f93c88a850f6b4cc86881e9f3f9f1e39574d9d83ddd8a6a
+R 17ad9438f43deccbfad222dc84835b58
+U drh
+Z 652d33c6a72178cf44c31358633e89a7
index fd03e49d4ec9a3ab28bf445aabd0f8d832cf1c95..e1bfe3befc359a579f0d1dbc20daf87fd1449387 100644 (file)
@@ -1 +1 @@
-ae9638e9c0ad0c366f93c88a850f6b4cc86881e9f3f9f1e39574d9d83ddd8a6a
\ No newline at end of file
+a8d65214a567eb1afd703ee4d09d398247e060a610b46097a726364db2861001
\ No newline at end of file
index 509470a15615c529f43a734917afc0bc53878d02..9f5b6fe6d95efb50c9e2148fa786afd86b6a67e7 100644 (file)
@@ -1493,8 +1493,8 @@ static void putsVarint(FILE *out, sqlite3_uint64 v){
 /*
 ** Write an SQLite value onto out.
 */
-static void putValue(FILE *out, sqlite3_value *pVal){
-  int iDType = sqlite3_value_type(pVal);
+static void putValue(FILE *out, sqlite3_stmt *pStmt, int k){
+  int iDType = sqlite3_column_type(pStmt, k);
   sqlite3_int64 iX;
   double rX;
   sqlite3_uint64 uX;
@@ -1503,24 +1503,24 @@ static void putValue(FILE *out, sqlite3_value *pVal){
   putc(iDType, out);
   switch( iDType ){
     case SQLITE_INTEGER:
-      iX = sqlite3_value_int64(pVal);
+      iX = sqlite3_column_int64(pStmt, k);
       memcpy(&uX, &iX, 8);
       for(j=56; j>=0; j-=8) putc((uX>>j)&0xff, out);
       break;
     case SQLITE_FLOAT:
-      rX = sqlite3_value_double(pVal);
+      rX = sqlite3_column_double(pStmt, k);
       memcpy(&uX, &rX, 8);
       for(j=56; j>=0; j-=8) putc((uX>>j)&0xff, out);
       break;
     case SQLITE_TEXT:
-      iX = sqlite3_value_bytes(pVal);
+      iX = sqlite3_column_bytes(pStmt, k);
       putsVarint(out, (sqlite3_uint64)iX);
-      fwrite(sqlite3_value_text(pVal),1,(size_t)iX,out);
+      fwrite(sqlite3_column_text(pStmt, k),1,(size_t)iX,out);
       break;
     case SQLITE_BLOB:
-      iX = sqlite3_value_bytes(pVal);
+      iX = sqlite3_column_bytes(pStmt, k);
       putsVarint(out, (sqlite3_uint64)iX);
-      fwrite(sqlite3_value_blob(pVal),1,(size_t)iX,out);
+      fwrite(sqlite3_column_blob(pStmt, k),1,(size_t)iX,out);
       break;
     case SQLITE_NULL:
       break;
@@ -1650,10 +1650,10 @@ static void changeset_one_table(const char *zTab, FILE *out){
       case SQLITE_UPDATE: {
         for(k=1, i=0; i<nCol; i++){
           if( aiFlg[i] ){
-            putValue(out, sqlite3_column_value(pStmt,k));
+            putValue(out, pStmt, k);
             k++;
           }else if( sqlite3_column_int(pStmt,k) ){
-            putValue(out, sqlite3_column_value(pStmt,k+1));
+            putValue(out, pStmt, k+1);
             k += 3;
           }else{
             putc(0, out);
@@ -1665,7 +1665,7 @@ static void changeset_one_table(const char *zTab, FILE *out){
             putc(0, out);
             k++;
           }else if( sqlite3_column_int(pStmt,k) ){
-            putValue(out, sqlite3_column_value(pStmt,k+2));
+            putValue(out, pStmt, k+2);
             k += 3;
           }else{
             putc(0, out);
@@ -1677,10 +1677,10 @@ static void changeset_one_table(const char *zTab, FILE *out){
       case SQLITE_INSERT: {
         for(k=1, i=0; i<nCol; i++){
           if( aiFlg[i] ){
-            putValue(out, sqlite3_column_value(pStmt,k));
+            putValue(out, pStmt, k);
             k++;
           }else{
-            putValue(out, sqlite3_column_value(pStmt,k+2));
+            putValue(out, pStmt, k+2);
             k += 3;
           }
         }
@@ -1689,10 +1689,10 @@ static void changeset_one_table(const char *zTab, FILE *out){
       case SQLITE_DELETE: {
         for(k=1, i=0; i<nCol; i++){
           if( aiFlg[i] ){
-            putValue(out, sqlite3_column_value(pStmt,k));
+            putValue(out, pStmt, k);
             k++;
           }else{
-            putValue(out, sqlite3_column_value(pStmt,k+1));
+            putValue(out, pStmt, k+1);
             k += 3;
           }
         }