gitlab.com/CoiaPrant/sqlite3@v1.19.1/testdata/tcl/malloc8.test (about)

     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