/ Hex Artifact Content
Login

Artifact 8bfb08842642b1a598a915b52a7f51fbc0289b62:


0000: 23 20 32 30 30 38 20 4a 75 6e 65 20 31 31 0a 23  # 2008 June 11.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  .#.# This file i
01b0: 6d 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20  mplements tests 
01c0: 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 53 51 4c  to make sure SQL
01d0: 69 74 65 20 64 6f 65 73 20 6e 6f 74 20 63 72 61  ite does not cra
01e0: 73 68 20 6f 72 0a 23 20 73 65 67 66 61 75 6c 74  sh or.# segfault
01f0: 20 69 66 20 69 74 20 73 65 65 73 20 61 20 63 6f   if it sees a co
0200: 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20 66  rrupt database f
0210: 69 6c 65 2e 20 20 49 74 20 73 70 65 63 69 66 69  ile.  It specifi
0220: 63 61 6c 6c 79 20 66 6f 63 75 73 65 73 0a 23 20  cally focuses.# 
0230: 6f 6e 20 63 6f 72 72 75 70 74 20 63 65 6c 6c 20  on corrupt cell 
0240: 6f 66 66 73 65 74 73 20 69 6e 20 61 20 62 74 72  offsets in a btr
0250: 65 65 20 70 61 67 65 2e 0a 23 0a 23 20 24 49 64  ee page..#.# $Id
0260: 3a 20 63 6f 72 72 75 70 74 37 2e 74 65 73 74 2c  : corrupt7.test,
0270: 76 20 31 2e 37 20 32 30 30 39 2f 30 36 2f 30 39  v 1.7 2009/06/09
0280: 20 31 33 3a 34 32 3a 32 35 20 64 72 68 20 45 78   13:42:25 drh Ex
0290: 70 20 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72  p $..set testdir
02a0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
02b0: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
02c0: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
02d0: 6c 0a 0a 23 20 57 65 20 6d 75 73 74 20 68 61 76  l..# We must hav
02e0: 65 20 74 68 65 20 70 61 67 65 5f 73 69 7a 65 20  e the page_size 
02f0: 70 72 61 67 6d 61 20 66 6f 72 20 74 68 65 73 65  pragma for these
0300: 20 74 65 73 74 73 20 74 6f 20 77 6f 72 6b 2e 0a   tests to work..
0310: 23 0a 69 66 63 61 70 61 62 6c 65 20 21 70 61 67  #.ifcapable !pag
0320: 65 72 5f 70 72 61 67 6d 61 73 20 7b 0a 20 20 66  er_pragmas {.  f
0330: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0340: 75 72 6e 0a 7d 0a 0a 23 20 43 72 65 61 74 65 20  urn.}..# Create 
0350: 61 20 73 69 6d 70 6c 65 2c 20 73 6d 61 6c 6c 20  a simple, small 
0360: 64 61 74 61 62 61 73 65 2e 0a 23 0a 64 6f 5f 74  database..#.do_t
0370: 65 73 74 20 63 6f 72 72 75 70 74 37 2d 31 2e 31  est corrupt7-1.1
0380: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0390: 20 20 20 50 52 41 47 4d 41 20 61 75 74 6f 5f 76     PRAGMA auto_v
03a0: 61 63 75 75 6d 3d 4f 46 46 3b 0a 20 20 20 20 50  acuum=OFF;.    P
03b0: 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3d  RAGMA page_size=
03c0: 31 30 32 34 3b 0a 20 20 20 20 43 52 45 41 54 45  1024;.    CREATE
03d0: 20 54 41 42 4c 45 20 74 31 28 78 29 3b 0a 20 20   TABLE t1(x);.  
03e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03f0: 28 78 29 20 56 41 4c 55 45 53 28 31 29 3b 0a 20  (x) VALUES(1);. 
0400: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0410: 31 28 78 29 20 56 41 4c 55 45 53 28 32 29 3b 0a  1(x) VALUES(2);.
0420: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0430: 74 31 28 78 29 20 53 45 4c 45 43 54 20 78 2b 32  t1(x) SELECT x+2
0440: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e   FROM t1;.    IN
0450: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 29 20  SERT INTO t1(x) 
0460: 53 45 4c 45 43 54 20 78 2b 34 20 46 52 4f 4d 20  SELECT x+4 FROM 
0470: 74 31 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t1;.    INSERT I
0480: 4e 54 4f 20 74 31 28 78 29 20 53 45 4c 45 43 54  NTO t1(x) SELECT
0490: 20 78 2b 38 20 46 52 4f 4d 20 74 31 3b 0a 20 20   x+8 FROM t1;.  
04a0: 7d 0a 20 20 66 69 6c 65 20 73 69 7a 65 20 74 65  }.  file size te
04b0: 73 74 2e 64 62 0a 7d 20 5b 65 78 70 72 20 7b 31  st.db.} [expr {1
04c0: 30 32 34 2a 32 7d 5d 0a 0a 23 20 56 65 72 69 66  024*2}]..# Verif
04d0: 79 20 74 68 61 74 20 74 68 65 20 66 69 6c 65 20  y that the file 
04e0: 66 6f 72 6d 61 74 20 69 73 20 61 73 20 77 65 20  format is as we 
04f0: 65 78 70 65 63 74 2e 20 20 54 68 65 20 70 61 67  expect.  The pag
0500: 65 20 73 69 7a 65 0a 23 20 73 68 6f 75 6c 64 20  e size.# should 
0510: 62 65 20 31 30 32 34 20 62 79 74 65 73 2e 0a 23  be 1024 bytes..#
0520: 0a 64 6f 5f 74 65 73 74 20 63 6f 72 72 75 70 74  .do_test corrupt
0530: 37 2d 31 2e 32 20 7b 0a 20 20 68 65 78 69 6f 5f  7-1.2 {.  hexio_
0540: 67 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72  get_int [hexio_r
0550: 65 61 64 20 74 65 73 74 2e 64 62 20 31 36 20 32  ead test.db 16 2
0560: 5d 0a 7d 20 31 30 32 34 20 20 20 3b 23 20 54 68  ].} 1024   ;# Th
0570: 65 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 31  e page size is 1
0580: 30 32 34 0a 64 6f 5f 74 65 73 74 20 63 6f 72 72  024.do_test corr
0590: 75 70 74 37 2d 31 2e 33 20 7b 0a 20 20 68 65 78  upt7-1.3 {.  hex
05a0: 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68 65 78 69  io_get_int [hexi
05b0: 6f 5f 72 65 61 64 20 74 65 73 74 2e 64 62 20 32  o_read test.db 2
05c0: 30 20 31 5d 0a 7d 20 30 20 20 20 20 20 20 3b 23  0 1].} 0      ;#
05d0: 20 55 6e 75 73 65 64 20 62 79 74 65 73 20 70 65   Unused bytes pe
05e0: 72 20 70 61 67 65 20 69 73 20 30 0a 0a 69 6e 74  r page is 0..int
05f0: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 63 6f 72  egrity_check cor
0600: 72 75 70 74 37 2d 31 2e 34 0a 0a 23 20 44 65 6c  rupt7-1.4..# Del
0610: 69 62 65 72 61 74 65 6c 79 20 63 6f 72 72 75 70  iberately corrup
0620: 74 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 63 65  t some of the ce
0630: 6c 6c 20 6f 66 66 73 65 74 73 20 69 6e 20 74 68  ll offsets in th
0640: 65 20 62 74 72 65 65 20 70 61 67 65 0a 23 20 6f  e btree page.# o
0650: 6e 20 70 61 67 65 20 32 20 6f 66 20 74 68 65 20  n page 2 of the 
0660: 64 61 74 61 62 61 73 65 2e 0a 23 0a 23 20 54 68  database..#.# Th
0670: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
0680: 69 73 20 64 69 66 66 65 72 65 6e 74 20 64 65 70  is different dep
0690: 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
06a0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 0a 23 20 53  r or not the.# S
06b0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 56 45  QLITE_ENABLE_OVE
06c0: 52 53 49 5a 45 5f 43 45 4c 4c 5f 43 48 45 43 4b  RSIZE_CELL_CHECK
06d0: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
06e0: 74 69 6f 6e 20 69 73 20 65 6e 67 61 67 65 64 2e  tion is engaged.
06f0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 6f 76 65  .#.ifcapable ove
0700: 72 73 69 7a 65 5f 63 65 6c 6c 5f 63 68 65 63 6b  rsize_cell_check
0710: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 72   {.  do_test cor
0720: 72 75 70 74 37 2d 32 2e 31 20 7b 0a 20 20 20 20  rupt7-2.1 {.    
0730: 64 62 20 63 6c 6f 73 65 0a 20 20 20 20 68 65 78  db close.    hex
0740: 69 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62  io_write test.db
0750: 20 31 30 36 32 20 46 46 0a 20 20 20 20 73 71 6c   1062 FF.    sql
0760: 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a  ite3 db test.db.
0770: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41      db eval {PRA
0780: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
0790: 65 63 6b 28 31 29 7d 0a 20 20 7d 20 7b 7b 2a 2a  eck(1)}.  } {{**
07a0: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61  * in database ma
07b0: 69 6e 20 2a 2a 2a 0a 50 61 67 65 20 32 3a 20 73  in ***.Page 2: s
07c0: 71 6c 69 74 65 33 42 74 72 65 65 49 6e 69 74 50  qlite3BtreeInitP
07d0: 61 67 65 28 29 20 72 65 74 75 72 6e 73 20 65 72  age() returns er
07e0: 72 6f 72 20 63 6f 64 65 20 31 31 7d 7d 0a 20 20  ror code 11}}.  
07f0: 64 6f 5f 74 65 73 74 20 63 6f 72 72 75 70 74 37  do_test corrupt7
0800: 2d 32 2e 32 20 7b 0a 20 20 20 20 64 62 20 63 6c  -2.2 {.    db cl
0810: 6f 73 65 0a 20 20 20 20 68 65 78 69 6f 5f 77 72  ose.    hexio_wr
0820: 69 74 65 20 74 65 73 74 2e 64 62 20 31 30 36 32  ite test.db 1062
0830: 20 30 34 0a 20 20 20 20 73 71 6c 69 74 65 33 20   04.    sqlite3 
0840: 64 62 20 74 65 73 74 2e 64 62 0a 20 20 20 20 64  db test.db.    d
0850: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 69  b eval {PRAGMA i
0860: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 28 31  ntegrity_check(1
0870: 29 7d 0a 20 20 7d 20 7b 7b 2a 2a 2a 20 69 6e 20  )}.  } {{*** in 
0880: 64 61 74 61 62 61 73 65 20 6d 61 69 6e 20 2a 2a  database main **
0890: 2a 0a 50 61 67 65 20 32 3a 20 73 71 6c 69 74 65  *.Page 2: sqlite
08a0: 33 42 74 72 65 65 49 6e 69 74 50 61 67 65 28 29  3BtreeInitPage()
08b0: 20 72 65 74 75 72 6e 73 20 65 72 72 6f 72 20 63   returns error c
08c0: 6f 64 65 20 31 31 7d 7d 0a 7d 20 65 6c 73 65 20  ode 11}}.} else 
08d0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 72 72  {.  do_test corr
08e0: 75 70 74 37 2d 32 2e 31 20 7b 0a 20 20 20 20 64  upt7-2.1 {.    d
08f0: 62 20 63 6c 6f 73 65 0a 20 20 20 20 68 65 78 69  b close.    hexi
0900: 6f 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20  o_write test.db 
0910: 31 30 36 32 20 46 46 0a 20 20 20 20 73 71 6c 69  1062 FF.    sqli
0920: 74 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20  te3 db test.db. 
0930: 20 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47     db eval {PRAG
0940: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
0950: 63 6b 28 31 29 7d 0a 20 20 7d 20 7b 7b 2a 2a 2a  ck(1)}.  } {{***
0960: 20 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61 69   in database mai
0970: 6e 20 2a 2a 2a 0a 43 6f 72 72 75 70 74 69 6f 6e  n ***.Corruption
0980: 20 64 65 74 65 63 74 65 64 20 69 6e 20 63 65 6c   detected in cel
0990: 6c 20 31 35 20 6f 6e 20 70 61 67 65 20 32 7d 7d  l 15 on page 2}}
09a0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 72 72 75  .  do_test corru
09b0: 70 74 37 2d 32 2e 32 20 7b 0a 20 20 20 20 64 62  pt7-2.2 {.    db
09c0: 20 63 6c 6f 73 65 0a 20 20 20 20 68 65 78 69 6f   close.    hexio
09d0: 5f 77 72 69 74 65 20 74 65 73 74 2e 64 62 20 31  _write test.db 1
09e0: 30 36 32 20 30 34 0a 20 20 20 20 73 71 6c 69 74  062 04.    sqlit
09f0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20  e3 db test.db.  
0a00: 20 20 64 62 20 65 76 61 6c 20 7b 50 52 41 47 4d    db eval {PRAGM
0a10: 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  A integrity_chec
0a20: 6b 28 31 29 7d 0a 20 20 7d 20 7b 7b 2a 2a 2a 20  k(1)}.  } {{*** 
0a30: 69 6e 20 64 61 74 61 62 61 73 65 20 6d 61 69 6e  in database main
0a40: 20 2a 2a 2a 0a 43 6f 72 72 75 70 74 69 6f 6e 20   ***.Corruption 
0a50: 64 65 74 65 63 74 65 64 20 69 6e 20 63 65 6c 6c  detected in cell
0a60: 20 31 35 20 6f 6e 20 70 61 67 65 20 32 7d 7d 0a   15 on page 2}}.
0a70: 7d 0a 20 20 0a 23 20 54 68 65 20 63 6f 64 65 20  }.  .# The code 
0a80: 70 61 74 68 20 74 68 61 74 20 77 61 73 20 63 61  path that was ca
0a90: 75 73 69 6e 67 20 74 68 65 20 62 75 66 66 65 72  using the buffer
0aa0: 20 6f 76 65 72 72 75 6e 20 74 68 61 74 20 74 68   overrun that th
0ab0: 69 73 20 74 65 73 74 0a 23 20 63 61 73 65 20 77  is test.# case w
0ac0: 61 73 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  as checking for 
0ad0: 77 61 73 20 72 65 6d 6f 76 65 64 2e 0a 23 0a 23  was removed..#.#
0ae0: 64 6f 5f 74 65 73 74 20 63 6f 72 72 75 70 74 37  do_test corrupt7
0af0: 2d 33 2e 31 20 7b 0a 23 20 20 65 78 65 63 73 71  -3.1 {.#  execsq
0b00: 6c 20 7b 0a 23 20 20 20 20 44 52 4f 50 20 54 41  l {.#    DROP TA
0b10: 42 4c 45 20 74 31 3b 0a 23 20 20 20 20 43 52 45  BLE t1;.#    CRE
0b20: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
0b30: 62 29 3b 0a 23 20 20 20 20 49 4e 53 45 52 54 20  b);.#    INSERT 
0b40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
0b50: 2c 20 27 6f 6e 65 27 29 3b 0a 23 20 20 20 20 49  , 'one');.#    I
0b60: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0b70: 4c 55 45 53 28 31 30 30 2c 20 27 6f 6e 65 20 68  LUES(100, 'one h
0b80: 75 6e 64 72 65 64 27 29 3b 0a 23 20 20 20 20 49  undred');.#    I
0b90: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0ba0: 4c 55 45 53 28 31 30 30 30 30 30 2c 20 27 6f 6e  LUES(100000, 'on
0bb0: 65 20 68 75 6e 64 72 65 64 20 74 68 6f 75 73 61  e hundred thousa
0bc0: 6e 64 27 29 3b 0a 23 20 20 20 20 43 52 45 41 54  nd');.#    CREAT
0bd0: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
0be0: 28 62 29 3b 0a 23 20 20 7d 0a 23 20 20 64 62 20  (b);.#  }.#  db 
0bf0: 63 6c 6f 73 65 0a 23 0a 23 20 20 23 20 4c 6f 63  close.#.#  # Loc
0c00: 61 74 65 20 74 68 65 20 33 72 64 20 63 65 6c 6c  ate the 3rd cell
0c10: 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a 23   in the index..#
0c20: 20 20 73 65 74 20 63 65 6c 6c 5f 6f 66 66 73 65    set cell_offse
0c30: 74 20 5b 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74  t [hexio_get_int
0c40: 20 5b 68 65 78 69 6f 5f 72 65 61 64 20 74 65 73   [hexio_read tes
0c50: 74 2e 64 62 20 5b 65 78 70 72 20 31 30 32 34 2a  t.db [expr 1024*
0c60: 32 20 2b 20 31 32 5d 20 32 5d 5d 0a 23 20 20 69  2 + 12] 2]].#  i
0c70: 6e 63 72 20 63 65 6c 6c 5f 6f 66 66 73 65 74 20  ncr cell_offset 
0c80: 5b 65 78 70 72 20 31 30 32 34 2a 32 5d 0a 23 20  [expr 1024*2].# 
0c90: 20 69 6e 63 72 20 63 65 6c 6c 5f 6f 66 66 73 65   incr cell_offse
0ca0: 74 20 31 0a 23 0a 23 20 20 23 20 54 68 69 73 20  t 1.#.#  # This 
0cb0: 77 72 69 74 65 20 63 6f 72 72 75 70 74 73 20 74  write corrupts t
0cc0: 68 65 20 22 68 65 61 64 65 72 2d 73 69 7a 65 22  he "header-size"
0cd0: 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 64 61   field of the da
0ce0: 74 61 62 61 73 65 20 72 65 63 6f 72 64 0a 23 20  tabase record.# 
0cf0: 20 23 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65   # stored in the
0d00: 20 69 6e 64 65 78 20 63 65 6c 6c 2e 20 41 74 20   index cell. At 
0d10: 6f 6e 65 20 70 6f 69 6e 74 20 74 68 69 73 20 77  one point this w
0d20: 61 73 20 63 61 75 73 69 6e 67 20 73 71 6c 69 74  as causing sqlit
0d30: 65 20 74 6f 20 0a 23 20 20 23 20 72 65 66 65 72  e to .#  # refer
0d40: 65 6e 63 65 20 69 6e 76 61 6c 69 64 20 6d 65 6d  ence invalid mem
0d50: 6f 72 79 2e 0a 23 20 20 68 65 78 69 6f 5f 77 72  ory..#  hexio_wr
0d60: 69 74 65 20 74 65 73 74 2e 64 62 20 24 63 65 6c  ite test.db $cel
0d70: 6c 5f 6f 66 66 73 65 74 20 46 46 46 46 37 46 0a  l_offset FFFF7F.
0d80: 23 20 20 0a 23 20 20 73 71 6c 69 74 65 33 20 64  #  .#  sqlite3 d
0d90: 62 20 74 65 73 74 2e 64 62 0a 23 20 20 63 61 74  b test.db.#  cat
0da0: 63 68 73 71 6c 20 7b 0a 23 20 20 20 20 53 45 4c  chsql {.#    SEL
0db0: 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48  ECT b FROM t1 WH
0dc0: 45 52 45 20 62 20 3e 20 27 6f 27 20 41 4e 44 20  ERE b > 'o' AND 
0dd0: 62 20 3c 20 27 70 27 3b 0a 23 20 20 7d 0a 23 7d  b < 'p';.#  }.#}
0de0: 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64 69   {1 {database di
0df0: 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66  sk image is malf
0e00: 6f 72 6d 65 64 7d 7d 0a 0a 66 69 6e 69 73 68 5f  ormed}}..finish_
0e10: 74 65 73 74 0a                                   test.