mirror of
				https://github.com/tursodatabase/libsql.git
				synced 2025-10-31 01:46:05 +00:00 
			
		
		
		
	Identify all tests where we deliberately derefence freed memory by adding a "-misuse" tag. (CVS 3550) FossilOrigin-Name: 70a862702d6dfcfe73bdeef8f0502c6c50e32a3a
		
			
				
	
	
		
			619 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			619 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # 2005 Mar 16
 | |
| #
 | |
| # The author disclaims copyright to this source code.  In place of
 | |
| # a legal notice, here is a blessing:
 | |
| #
 | |
| #    May you do good and not evil.
 | |
| #    May you find forgiveness for yourself and forgive others.
 | |
| #    May you share freely, never taking more than you give.
 | |
| #
 | |
| #***********************************************************************
 | |
| # This file implements regression tests for SQLite library.
 | |
| #
 | |
| # This file implements tests for miscellanous features that were
 | |
| # left out of other test files.
 | |
| #
 | |
| # $Id: misc5.test,v 1.16 2007/01/03 23:37:29 drh Exp $
 | |
| 
 | |
| set testdir [file dirname $argv0]
 | |
| source $testdir/tester.tcl
 | |
| 
 | |
| # Build records using the MakeRecord opcode such that the size of the 
 | |
| # header is at the transition point in the size of a varint.
 | |
| #
 | |
| # This test causes an assertion failure or a buffer overrun in version
 | |
| # 3.1.5 and earlier.
 | |
| #
 | |
| for {set i 120} {$i<140} {incr i} {
 | |
|   do_test misc5-1.$i {
 | |
|     catchsql {DROP TABLE t1}
 | |
|     set sql1 {CREATE TABLE t1}
 | |
|     set sql2 {INSERT INTO t1 VALUES}
 | |
|     set sep (
 | |
|     for {set j 0} {$j<$i} {incr j} {
 | |
|       append sql1 ${sep}a$j
 | |
|       append sql2 ${sep}$j
 | |
|       set sep ,
 | |
|     }
 | |
|     append sql1 {);}
 | |
|     append sql2 {);}
 | |
|     execsql $sql1$sql2
 | |
|   } {}
 | |
| }
 | |
| 
 | |
| # Make sure large integers are stored correctly.
 | |
| #
 | |
| ifcapable conflict {
 | |
|   do_test misc5-2.1 {
 | |
|     execsql {
 | |
|       create table t2(x unique);
 | |
|       insert into t2 values(1);
 | |
|       insert or ignore into t2 select x*2 from t2;
 | |
|       insert or ignore into t2 select x*4 from t2;
 | |
|       insert or ignore into t2 select x*16 from t2;
 | |
|       insert or ignore into t2 select x*256 from t2;
 | |
|       insert or ignore into t2 select x*65536 from t2;
 | |
|       insert or ignore into t2 select x*2147483648 from t2;
 | |
|       insert or ignore into t2 select x-1 from t2;
 | |
|       insert or ignore into t2 select x+1 from t2;
 | |
|       insert or ignore into t2 select -x from t2;
 | |
|       select count(*) from t2;
 | |
|     }
 | |
|   } 371
 | |
| } else {
 | |
|   do_test misc5-2.1 {
 | |
|     execsql {
 | |
|       BEGIN;
 | |
|       create table t2(x unique);
 | |
|       create table t2_temp(x);
 | |
|       insert into t2_temp values(1);
 | |
|       insert into t2_temp select x*2 from t2_temp;
 | |
|       insert into t2_temp select x*4 from t2_temp;
 | |
|       insert into t2_temp select x*16 from t2_temp;
 | |
|       insert into t2_temp select x*256 from t2_temp;
 | |
|       insert into t2_temp select x*65536 from t2_temp;
 | |
|       insert into t2_temp select x*2147483648 from t2_temp;
 | |
|       insert into t2_temp select x-1 from t2_temp;
 | |
|       insert into t2_temp select x+1 from t2_temp;
 | |
|       insert into t2_temp select -x from t2_temp;
 | |
|       INSERT INTO t2 SELECT DISTINCT(x) FROM t2_temp;
 | |
|       DROP TABLE t2_temp;
 | |
|       COMMIT;
 | |
|       select count(*) from t2;
 | |
|     }
 | |
|   } 371
 | |
| }
 | |
| do_test misc5-2.2 {
 | |
|   execsql {
 | |
|     select x from t2 order by x;
 | |
|   }
 | |
| } \
 | |
| "-4611686018427387905\
 | |
| -4611686018427387904\
 | |
| -4611686018427387903\
 | |
| -2305843009213693953\
 | |
| -2305843009213693952\
 | |
| -2305843009213693951\
 | |
| -1152921504606846977\
 | |
| -1152921504606846976\
 | |
| -1152921504606846975\
 | |
| -576460752303423489\
 | |
| -576460752303423488\
 | |
| -576460752303423487\
 | |
| -288230376151711745\
 | |
| -288230376151711744\
 | |
| -288230376151711743\
 | |
| -144115188075855873\
 | |
| -144115188075855872\
 | |
| -144115188075855871\
 | |
| -72057594037927937\
 | |
| -72057594037927936\
 | |
| -72057594037927935\
 | |
| -36028797018963969\
 | |
| -36028797018963968\
 | |
| -36028797018963967\
 | |
| -18014398509481985\
 | |
| -18014398509481984\
 | |
| -18014398509481983\
 | |
| -9007199254740993\
 | |
| -9007199254740992\
 | |
| -9007199254740991\
 | |
| -4503599627370497\
 | |
| -4503599627370496\
 | |
| -4503599627370495\
 | |
| -2251799813685249\
 | |
| -2251799813685248\
 | |
| -2251799813685247\
 | |
| -1125899906842625\
 | |
| -1125899906842624\
 | |
| -1125899906842623\
 | |
| -562949953421313\
 | |
| -562949953421312\
 | |
| -562949953421311\
 | |
| -281474976710657\
 | |
| -281474976710656\
 | |
| -281474976710655\
 | |
| -140737488355329\
 | |
| -140737488355328\
 | |
| -140737488355327\
 | |
| -70368744177665\
 | |
| -70368744177664\
 | |
| -70368744177663\
 | |
| -35184372088833\
 | |
| -35184372088832\
 | |
| -35184372088831\
 | |
| -17592186044417\
 | |
| -17592186044416\
 | |
| -17592186044415\
 | |
| -8796093022209\
 | |
| -8796093022208\
 | |
| -8796093022207\
 | |
| -4398046511105\
 | |
| -4398046511104\
 | |
| -4398046511103\
 | |
| -2199023255553\
 | |
| -2199023255552\
 | |
| -2199023255551\
 | |
| -1099511627777\
 | |
| -1099511627776\
 | |
| -1099511627775\
 | |
| -549755813889\
 | |
| -549755813888\
 | |
| -549755813887\
 | |
| -274877906945\
 | |
| -274877906944\
 | |
| -274877906943\
 | |
| -137438953473\
 | |
| -137438953472\
 | |
| -137438953471\
 | |
| -68719476737\
 | |
| -68719476736\
 | |
| -68719476735\
 | |
| -34359738369\
 | |
| -34359738368\
 | |
| -34359738367\
 | |
| -17179869185\
 | |
| -17179869184\
 | |
| -17179869183\
 | |
| -8589934593\
 | |
| -8589934592\
 | |
| -8589934591\
 | |
| -4294967297\
 | |
| -4294967296\
 | |
| -4294967295\
 | |
| -2147483649\
 | |
| -2147483648\
 | |
| -2147483647\
 | |
| -1073741825\
 | |
| -1073741824\
 | |
| -1073741823\
 | |
| -536870913\
 | |
| -536870912\
 | |
| -536870911\
 | |
| -268435457\
 | |
| -268435456\
 | |
| -268435455\
 | |
| -134217729\
 | |
| -134217728\
 | |
| -134217727\
 | |
| -67108865\
 | |
| -67108864\
 | |
| -67108863\
 | |
| -33554433\
 | |
| -33554432\
 | |
| -33554431\
 | |
| -16777217\
 | |
| -16777216\
 | |
| -16777215\
 | |
| -8388609\
 | |
| -8388608\
 | |
| -8388607\
 | |
| -4194305\
 | |
| -4194304\
 | |
| -4194303\
 | |
| -2097153\
 | |
| -2097152\
 | |
| -2097151\
 | |
| -1048577\
 | |
| -1048576\
 | |
| -1048575\
 | |
| -524289\
 | |
| -524288\
 | |
| -524287\
 | |
| -262145\
 | |
| -262144\
 | |
| -262143\
 | |
| -131073\
 | |
| -131072\
 | |
| -131071\
 | |
| -65537\
 | |
| -65536\
 | |
| -65535\
 | |
| -32769\
 | |
| -32768\
 | |
| -32767\
 | |
| -16385\
 | |
| -16384\
 | |
| -16383\
 | |
| -8193\
 | |
| -8192\
 | |
| -8191\
 | |
| -4097\
 | |
| -4096\
 | |
| -4095\
 | |
| -2049\
 | |
| -2048\
 | |
| -2047\
 | |
| -1025\
 | |
| -1024\
 | |
| -1023\
 | |
| -513\
 | |
| -512\
 | |
| -511\
 | |
| -257\
 | |
| -256\
 | |
| -255\
 | |
| -129\
 | |
| -128\
 | |
| -127\
 | |
| -65\
 | |
| -64\
 | |
| -63\
 | |
| -33\
 | |
| -32\
 | |
| -31\
 | |
| -17\
 | |
| -16\
 | |
| -15\
 | |
| -9\
 | |
| -8\
 | |
| -7\
 | |
| -5\
 | |
| -4\
 | |
| -3\
 | |
| -2\
 | |
| -1\
 | |
| 0\
 | |
| 1\
 | |
| 2\
 | |
| 3\
 | |
| 4\
 | |
| 5\
 | |
| 7\
 | |
| 8\
 | |
| 9\
 | |
| 15\
 | |
| 16\
 | |
| 17\
 | |
| 31\
 | |
| 32\
 | |
| 33\
 | |
| 63\
 | |
| 64\
 | |
| 65\
 | |
| 127\
 | |
| 128\
 | |
| 129\
 | |
| 255\
 | |
| 256\
 | |
| 257\
 | |
| 511\
 | |
| 512\
 | |
| 513\
 | |
| 1023\
 | |
| 1024\
 | |
| 1025\
 | |
| 2047\
 | |
| 2048\
 | |
| 2049\
 | |
| 4095\
 | |
| 4096\
 | |
| 4097\
 | |
| 8191\
 | |
| 8192\
 | |
| 8193\
 | |
| 16383\
 | |
| 16384\
 | |
| 16385\
 | |
| 32767\
 | |
| 32768\
 | |
| 32769\
 | |
| 65535\
 | |
| 65536\
 | |
| 65537\
 | |
| 131071\
 | |
| 131072\
 | |
| 131073\
 | |
| 262143\
 | |
| 262144\
 | |
| 262145\
 | |
| 524287\
 | |
| 524288\
 | |
| 524289\
 | |
| 1048575\
 | |
| 1048576\
 | |
| 1048577\
 | |
| 2097151\
 | |
| 2097152\
 | |
| 2097153\
 | |
| 4194303\
 | |
| 4194304\
 | |
| 4194305\
 | |
| 8388607\
 | |
| 8388608\
 | |
| 8388609\
 | |
| 16777215\
 | |
| 16777216\
 | |
| 16777217\
 | |
| 33554431\
 | |
| 33554432\
 | |
| 33554433\
 | |
| 67108863\
 | |
| 67108864\
 | |
| 67108865\
 | |
| 134217727\
 | |
| 134217728\
 | |
| 134217729\
 | |
| 268435455\
 | |
| 268435456\
 | |
| 268435457\
 | |
| 536870911\
 | |
| 536870912\
 | |
| 536870913\
 | |
| 1073741823\
 | |
| 1073741824\
 | |
| 1073741825\
 | |
| 2147483647\
 | |
| 2147483648\
 | |
| 2147483649\
 | |
| 4294967295\
 | |
| 4294967296\
 | |
| 4294967297\
 | |
| 8589934591\
 | |
| 8589934592\
 | |
| 8589934593\
 | |
| 17179869183\
 | |
| 17179869184\
 | |
| 17179869185\
 | |
| 34359738367\
 | |
| 34359738368\
 | |
| 34359738369\
 | |
| 68719476735\
 | |
| 68719476736\
 | |
| 68719476737\
 | |
| 137438953471\
 | |
| 137438953472\
 | |
| 137438953473\
 | |
| 274877906943\
 | |
| 274877906944\
 | |
| 274877906945\
 | |
| 549755813887\
 | |
| 549755813888\
 | |
| 549755813889\
 | |
| 1099511627775\
 | |
| 1099511627776\
 | |
| 1099511627777\
 | |
| 2199023255551\
 | |
| 2199023255552\
 | |
| 2199023255553\
 | |
| 4398046511103\
 | |
| 4398046511104\
 | |
| 4398046511105\
 | |
| 8796093022207\
 | |
| 8796093022208\
 | |
| 8796093022209\
 | |
| 17592186044415\
 | |
| 17592186044416\
 | |
| 17592186044417\
 | |
| 35184372088831\
 | |
| 35184372088832\
 | |
| 35184372088833\
 | |
| 70368744177663\
 | |
| 70368744177664\
 | |
| 70368744177665\
 | |
| 140737488355327\
 | |
| 140737488355328\
 | |
| 140737488355329\
 | |
| 281474976710655\
 | |
| 281474976710656\
 | |
| 281474976710657\
 | |
| 562949953421311\
 | |
| 562949953421312\
 | |
| 562949953421313\
 | |
| 1125899906842623\
 | |
| 1125899906842624\
 | |
| 1125899906842625\
 | |
| 2251799813685247\
 | |
| 2251799813685248\
 | |
| 2251799813685249\
 | |
| 4503599627370495\
 | |
| 4503599627370496\
 | |
| 4503599627370497\
 | |
| 9007199254740991\
 | |
| 9007199254740992\
 | |
| 9007199254740993\
 | |
| 18014398509481983\
 | |
| 18014398509481984\
 | |
| 18014398509481985\
 | |
| 36028797018963967\
 | |
| 36028797018963968\
 | |
| 36028797018963969\
 | |
| 72057594037927935\
 | |
| 72057594037927936\
 | |
| 72057594037927937\
 | |
| 144115188075855871\
 | |
| 144115188075855872\
 | |
| 144115188075855873\
 | |
| 288230376151711743\
 | |
| 288230376151711744\
 | |
| 288230376151711745\
 | |
| 576460752303423487\
 | |
| 576460752303423488\
 | |
| 576460752303423489\
 | |
| 1152921504606846975\
 | |
| 1152921504606846976\
 | |
| 1152921504606846977\
 | |
| 2305843009213693951\
 | |
| 2305843009213693952\
 | |
| 2305843009213693953\
 | |
| 4611686018427387903\
 | |
| 4611686018427387904\
 | |
| 4611686018427387905"
 | |
| 
 | |
| # Ticket #1210.  Do proper reference counting of Table structures
 | |
| # so that deeply nested SELECT statements can be flattened correctly.
 | |
| #
 | |
| ifcapable subquery {
 | |
|   do_test misc5-3.1 {
 | |
|     execsql {
 | |
|       CREATE TABLE songs(songid, artist, timesplayed);
 | |
|       INSERT INTO songs VALUES(1,'one',1);
 | |
|       INSERT INTO songs VALUES(2,'one',2);
 | |
|       INSERT INTO songs VALUES(3,'two',3);
 | |
|       INSERT INTO songs VALUES(4,'three',5);
 | |
|       INSERT INTO songs VALUES(5,'one',7);
 | |
|       INSERT INTO songs VALUES(6,'two',11);
 | |
|       SELECT DISTINCT artist 
 | |
|       FROM (    
 | |
|        SELECT DISTINCT artist    
 | |
|        FROM songs      
 | |
|        WHERE songid IN (    
 | |
|         SELECT songid    
 | |
|         FROM songs    
 | |
|         WHERE LOWER(artist) = (    
 | |
|           SELECT DISTINCT LOWER(artist)    
 | |
|           FROM (      
 | |
|             SELECT DISTINCT artist,sum(timesplayed) AS total      
 | |
|             FROM songs      
 | |
|             GROUP BY LOWER(artist)      
 | |
|             ORDER BY total DESC      
 | |
|             LIMIT 10    
 | |
|           )    
 | |
|           WHERE artist <> '' 
 | |
|         )  
 | |
|        )       
 | |
|       )  
 | |
|       ORDER BY LOWER(artist) ASC;
 | |
|     }
 | |
|   } {two}
 | |
| }
 | |
| 
 | |
| # Ticket #1370.  Do not overwrite small files (less than 1024 bytes)
 | |
| # when trying to open them as a database.
 | |
| #
 | |
| do_test misc5-4.1 {
 | |
|   db close
 | |
|   file delete -force test.db
 | |
|   set fd [open test.db w]
 | |
|   puts $fd "This is not really a database"
 | |
|   close $fd
 | |
|   sqlite3 db test.db
 | |
|   catchsql {
 | |
|     CREATE TABLE t1(a,b,c);
 | |
|   }
 | |
| } {1 {file is encrypted or is not a database}}
 | |
| 
 | |
| # Ticket #1371.  Allow floating point numbers of the form .N  or N.
 | |
| #
 | |
| do_test misc5-5.1 {
 | |
|   execsql {SELECT .1 }
 | |
| } 0.1
 | |
| do_test misc5-5.2 {
 | |
|   execsql {SELECT 2. }
 | |
| } 2.0
 | |
| do_test misc5-5.3 {
 | |
|   execsql {SELECT 3.e0 }
 | |
| } 3.0
 | |
| do_test misc5-5.4 {
 | |
|   execsql {SELECT .4e+1}
 | |
| } 4.0
 | |
| 
 | |
| # Ticket #1582.  Ensure that an unknown table in a LIMIT clause applied to
 | |
| # a UNION ALL query causes an error, not a crash.
 | |
| #
 | |
| db close
 | |
| file delete -force test.db
 | |
| sqlite3 db test.db
 | |
| ifcapable subquery&&compound {
 | |
|   do_test misc5-6.1 {
 | |
|     catchsql {
 | |
|       SELECT * FROM sqlite_master 
 | |
|       UNION ALL 
 | |
|       SELECT * FROM sqlite_master
 | |
|       LIMIT (SELECT count(*) FROM blah);
 | |
|     }
 | |
|   } {1 {no such table: blah}}
 | |
|   do_test misc5-6.2 {
 | |
|     execsql {
 | |
|       CREATE TABLE logs(msg TEXT, timestamp INTEGER, dbtime TEXT);
 | |
|     }
 | |
|     catchsql {
 | |
|       SELECT * FROM logs WHERE logs.id >= (SELECT head FROM logs_base) 
 | |
|       UNION ALL 
 | |
|       SELECT * FROM logs 
 | |
|       LIMIT (SELECT lmt FROM logs_base) ;
 | |
|     }
 | |
|   } {1 {no such column: logs.id}}
 | |
| }
 | |
| 
 | |
| # Overflow the lemon parser stack by providing an overly complex
 | |
| # expression.  Make sure that the overflow is detected and reported.
 | |
| #
 | |
| do_test misc5-7.1 {
 | |
|   execsql {CREATE TABLE t1(x)}
 | |
|   set sql "INSERT INTO t1 VALUES("
 | |
|   set tail ""
 | |
|   for {set i 0} {$i<200} {incr i} {
 | |
|     append sql "(1+"
 | |
|     append tail ")"
 | |
|   }
 | |
|   append sql 2$tail
 | |
|   catchsql $sql
 | |
| } {1 {parser stack overflow}}
 | |
| 
 | |
| # Check the MISUSE return from sqlitee3_busy_timeout
 | |
| #
 | |
| do_test misc5-8.1-misuse {
 | |
|   set DB [sqlite3_connection_pointer db]
 | |
|   db close
 | |
|   sqlite3_busy_timeout $DB 1000
 | |
| } SQLITE_MISUSE
 | |
| sqlite3 db test.db
 | |
| 
 | |
| # Ticket #1911
 | |
| #
 | |
| do_test misc5-9.1 {
 | |
|   execsql {
 | |
|     SELECT name, type FROM sqlite_master WHERE name IS NULL
 | |
|     UNION
 | |
|     SELECT type, name FROM sqlite_master WHERE type IS NULL
 | |
|     ORDER BY 1, 2, 1, 2, 1, 2
 | |
|   }
 | |
| } {}
 | |
| do_test misc5-9.2 {
 | |
|   execsql {
 | |
|     SELECT name, type FROM sqlite_master WHERE name IS NULL
 | |
|     UNION
 | |
|     SELECT type, name FROM sqlite_master WHERE type IS NULL
 | |
|     ORDER BY 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2
 | |
|   }
 | |
| } {}
 | |
| 
 | |
| # Ticket #1912.  Make the tokenizer require a space after a numeric
 | |
| # literal.
 | |
| #
 | |
| do_test misc5-10.1 {
 | |
|   catchsql {
 | |
|     SELECT 123abc
 | |
|   }
 | |
| } {1 {unrecognized token: "123abc"}}
 | |
| do_test misc5-10.2 {
 | |
|   catchsql {
 | |
|     SELECT 1*123.4e5ghi;
 | |
|   }
 | |
| } {1 {unrecognized token: "123.4e5ghi"}}
 | |
| 
 | |
| 
 | |
| 
 | |
| finish_test
 |