diff options
author | drh <drh@noemail.net> | 2018-11-09 23:41:57 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2018-11-09 23:41:57 +0000 |
commit | ac4b8dea9b0dbae20b28db43c36f347d7043b0c5 (patch) | |
tree | 4242559cdcf103ca8c44a1e9da54a81ffc3ca47c /tool/sqldiff.c | |
parent | b4307018231380dd8d997fe5fc40fc1a5d135cdb (diff) | |
download | sqlite-ac4b8dea9b0dbae20b28db43c36f347d7043b0c5.tar.gz sqlite-ac4b8dea9b0dbae20b28db43c36f347d7043b0c5.zip |
Fix invalid use of unprotected sqlite3_value objects in the sqldiff utility,
when using the --changeset option.
FossilOrigin-Name: a8d65214a567eb1afd703ee4d09d398247e060a610b46097a726364db2861001
Diffstat (limited to 'tool/sqldiff.c')
-rw-r--r-- | tool/sqldiff.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/tool/sqldiff.c b/tool/sqldiff.c index 509470a15..9f5b6fe6d 100644 --- a/tool/sqldiff.c +++ b/tool/sqldiff.c @@ -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; } } |