1276fdbfdSdrh# 2007 April 25 27a521cfbSdrh# 37a521cfbSdrh# The author disclaims copyright to this source code. In place of 47a521cfbSdrh# a legal notice, here is a blessing: 57a521cfbSdrh# 67a521cfbSdrh# May you do good and not evil. 77a521cfbSdrh# May you find forgiveness for yourself and forgive others. 87a521cfbSdrh# May you share freely, never taking more than you give. 97a521cfbSdrh# 107a521cfbSdrh#*********************************************************************** 117a521cfbSdrh# This file contains additional out-of-memory checks (see malloc.tcl) 127a521cfbSdrh# added to expose a bug in out-of-memory handling for sqlite3_value_text() 137a521cfbSdrh# 14*eee4c8caSdrh# $Id: malloc8.test,v 1.7 2008/02/18 22:24:58 drh Exp $ 157a521cfbSdrh 167a521cfbSdrhset testdir [file dirname $argv0] 177a521cfbSdrhsource $testdir/tester.tcl 18*eee4c8caSdrhsource $testdir/malloc_common.tcl 197a521cfbSdrh 207a521cfbSdrh# Only run these tests if memory debugging is turned on. 217a521cfbSdrh# 22*eee4c8caSdrhif {!$MEMDEBUG} { 235a3032b3Sdrh puts "Skipping malloc8 tests: not compiled with -DSQLITE_MEMDEBUG..." 247a521cfbSdrh finish_test 257a521cfbSdrh return 267a521cfbSdrh} 277a521cfbSdrh 287a521cfbSdrh 297a521cfbSdrh# The setup is a database with UTF-16 encoding that contains a single 307a521cfbSdrh# large string. We will be running lots of queries against this 317a521cfbSdrh# database. Because we will be extracting the string as UTF-8, there 327a521cfbSdrh# is a type conversion that occurs and thus an opportunity for malloc() 337a521cfbSdrh# to fail and for sqlite3_value_text() to return 0 even though 347a521cfbSdrh# sqlite3_value_type() returns SQLITE_TEXT. 357a521cfbSdrh# 36ed138fb3Sdrh 37ed138fb3Sdrhdo_malloc_test malloc8-1 -sqlprep { 387a521cfbSdrh PRAGMA encoding='UTF-16'; 397a521cfbSdrh CREATE TABLE t1(a); 407a521cfbSdrh INSERT INTO t1 417a521cfbSdrh VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); 42ed138fb3Sdrh} -sqlbody { 437a521cfbSdrh SELECT lower(a), upper(a), quote(a), trim(a), trim('x',a) FROM t1; 447a521cfbSdrh} 45ed138fb3Sdrhdo_malloc_test malloc8-2 -sqlprep { 46ed138fb3Sdrh PRAGMA encoding='UTF-16'; 47ed138fb3Sdrh CREATE TABLE t1(a); 48ed138fb3Sdrh INSERT INTO t1 49ed138fb3Sdrh VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); 50ed138fb3Sdrh} -sqlbody { 517a521cfbSdrh SELECT replace(a,'x','y'), replace('x',a,'y'), replace('x','y',a) 527a521cfbSdrh FROM t1; 537a521cfbSdrh} 54ed138fb3Sdrhdo_malloc_test malloc8-3 -sqlprep { 55ed138fb3Sdrh PRAGMA encoding='UTF-16'; 56ed138fb3Sdrh CREATE TABLE t1(a); 57ed138fb3Sdrh INSERT INTO t1 58ed138fb3Sdrh VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); 59ed138fb3Sdrh} -sqlbody { 607a521cfbSdrh SELECT length(a), substr(a, 4, 4) FROM t1; 617a521cfbSdrh} 624152e677Sdanielk1977ifcapable datetime { 63ed138fb3Sdrh do_malloc_test malloc8-4 -sqlprep { 64ed138fb3Sdrh PRAGMA encoding='UTF-16'; 65ed138fb3Sdrh CREATE TABLE t1(a); 66ed138fb3Sdrh INSERT INTO t1 67ed138fb3Sdrh VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); 68ed138fb3Sdrh } -sqlbody { 697a521cfbSdrh SELECT julianday(a,a) FROM t1; 707a521cfbSdrh } 714152e677Sdanielk1977} 72ed138fb3Sdrhdo_malloc_test malloc8-5 -sqlprep { 73ed138fb3Sdrh PRAGMA encoding='UTF-16'; 74ed138fb3Sdrh CREATE TABLE t1(a); 75ed138fb3Sdrh INSERT INTO t1 76ed138fb3Sdrh VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); 77ed138fb3Sdrh} -sqlbody { 787a521cfbSdrh SELECT 1 FROM t1 WHERE a LIKE 'hello' ESCAPE NULL; 797a521cfbSdrh} 80ed138fb3Sdrhdo_malloc_test malloc8-6 -sqlprep { 81ed138fb3Sdrh PRAGMA encoding='UTF-16'; 82ed138fb3Sdrh CREATE TABLE t1(a); 83ed138fb3Sdrh INSERT INTO t1 84ed138fb3Sdrh VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); 85ed138fb3Sdrh} -sqlbody { 8602d85836Sdrh SELECT hex(randomblob(100)); 8702d85836Sdrh} 887a521cfbSdrh 897a521cfbSdrh# Ensure that no file descriptors were leaked. 907a521cfbSdrhdo_test malloc-99.X { 917a521cfbSdrh catch {db close} 927a521cfbSdrh set sqlite_open_file_count 937a521cfbSdrh} {0} 947a521cfbSdrh 957a521cfbSdrhfinish_test 96