xref: /sqlite-3.40.0/test/malloc8.test (revision eee4c8ca)
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