| OLD | NEW | 
 | (Empty) | 
|   1 # 2007 April 25 |  | 
|   2 # |  | 
|   3 # The author disclaims copyright to this source code.  In place of |  | 
|   4 # a legal notice, here is a blessing: |  | 
|   5 # |  | 
|   6 #    May you do good and not evil. |  | 
|   7 #    May you find forgiveness for yourself and forgive others. |  | 
|   8 #    May you share freely, never taking more than you give. |  | 
|   9 # |  | 
|  10 #*********************************************************************** |  | 
|  11 # This file contains additional out-of-memory checks (see malloc.tcl) |  | 
|  12 # added to expose a bug in out-of-memory handling for sqlite3_value_text() |  | 
|  13 # |  | 
|  14 # $Id: malloc8.test,v 1.7 2008/02/18 22:24:58 drh Exp $ |  | 
|  15  |  | 
|  16 set testdir [file dirname $argv0] |  | 
|  17 source $testdir/tester.tcl |  | 
|  18 source $testdir/malloc_common.tcl |  | 
|  19  |  | 
|  20 # Only run these tests if memory debugging is turned on. |  | 
|  21 # |  | 
|  22 if {!$MEMDEBUG} { |  | 
|  23    puts "Skipping malloc8 tests: not compiled with -DSQLITE_MEMDEBUG..." |  | 
|  24    finish_test |  | 
|  25    return |  | 
|  26 } |  | 
|  27  |  | 
|  28  |  | 
|  29 # The setup is a database with UTF-16 encoding that contains a single |  | 
|  30 # large string.  We will be running lots of queries against this  |  | 
|  31 # database.  Because we will be extracting the string as UTF-8, there |  | 
|  32 # is a type conversion that occurs and thus an opportunity for malloc() |  | 
|  33 # to fail and for sqlite3_value_text() to return 0 even though |  | 
|  34 # sqlite3_value_type() returns SQLITE_TEXT. |  | 
|  35 # |  | 
|  36  |  | 
|  37 do_malloc_test malloc8-1 -sqlprep { |  | 
|  38   PRAGMA encoding='UTF-16'; |  | 
|  39   CREATE TABLE t1(a); |  | 
|  40   INSERT INTO t1  |  | 
|  41   VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); |  | 
|  42 } -sqlbody { |  | 
|  43   SELECT lower(a), upper(a), quote(a), trim(a), trim('x',a) FROM t1; |  | 
|  44 } |  | 
|  45 do_malloc_test malloc8-2 -sqlprep { |  | 
|  46   PRAGMA encoding='UTF-16'; |  | 
|  47   CREATE TABLE t1(a); |  | 
|  48   INSERT INTO t1  |  | 
|  49   VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); |  | 
|  50 } -sqlbody { |  | 
|  51   SELECT replace(a,'x','y'), replace('x',a,'y'), replace('x','y',a) |  | 
|  52     FROM t1; |  | 
|  53 } |  | 
|  54 do_malloc_test malloc8-3 -sqlprep { |  | 
|  55   PRAGMA encoding='UTF-16'; |  | 
|  56   CREATE TABLE t1(a); |  | 
|  57   INSERT INTO t1  |  | 
|  58   VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); |  | 
|  59 } -sqlbody { |  | 
|  60   SELECT length(a), substr(a, 4, 4) FROM t1; |  | 
|  61 } |  | 
|  62 ifcapable datetime { |  | 
|  63   do_malloc_test malloc8-4 -sqlprep { |  | 
|  64     PRAGMA encoding='UTF-16'; |  | 
|  65     CREATE TABLE t1(a); |  | 
|  66     INSERT INTO t1  |  | 
|  67     VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); |  | 
|  68   } -sqlbody { |  | 
|  69     SELECT julianday(a,a) FROM t1; |  | 
|  70   } |  | 
|  71 } |  | 
|  72 do_malloc_test malloc8-5 -sqlprep { |  | 
|  73   PRAGMA encoding='UTF-16'; |  | 
|  74   CREATE TABLE t1(a); |  | 
|  75   INSERT INTO t1  |  | 
|  76   VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); |  | 
|  77 } -sqlbody { |  | 
|  78   SELECT 1 FROM t1 WHERE a LIKE 'hello' ESCAPE NULL; |  | 
|  79 } |  | 
|  80 do_malloc_test malloc8-6 -sqlprep { |  | 
|  81   PRAGMA encoding='UTF-16'; |  | 
|  82   CREATE TABLE t1(a); |  | 
|  83   INSERT INTO t1  |  | 
|  84   VALUES('0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ'); |  | 
|  85 } -sqlbody { |  | 
|  86   SELECT hex(randomblob(100)); |  | 
|  87 } |  | 
|  88  |  | 
|  89 # Ensure that no file descriptors were leaked. |  | 
|  90 do_test malloc-99.X { |  | 
|  91   catch {db close} |  | 
|  92   set sqlite_open_file_count |  | 
|  93 } {0} |  | 
|  94  |  | 
|  95 finish_test |  | 
| OLD | NEW |