/ Hex Artifact Content
Login

Artifact bf55c3fa0b0dc8ea1c0fe5543623bd27714585da6a129038fd6999fe3b0d25f3:


0000: 23 20 32 30 31 30 20 4f 63 74 6f 62 65 72 20 33  # 2010 October 3
0010: 30 0a 23 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  0.#.#    May you
0020: 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74   do good and not
0030: 20 65 76 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20   evil..#    May 
0040: 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65  you find forgive
0050: 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c  ness for yoursel
0060: 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74  f and forgive ot
0070: 68 65 72 73 2e 0a 23 20 20 20 20 4d 61 79 20 79  hers..#    May y
0080: 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c 79 2c  ou share freely,
0090: 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f   never taking mo
00a0: 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76 65  re than you give
00b0: 2e 0a 23 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..#.#***********
00c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54  ************.# T
0100: 65 73 74 20 74 68 61 74 20 74 68 65 20 46 54 53  est that the FTS
0110: 33 20 65 78 74 65 6e 73 69 6f 6e 20 64 6f 65 73  3 extension does
0120: 20 6e 6f 74 20 63 72 61 73 68 20 77 68 65 6e 20   not crash when 
0130: 69 74 20 65 6e 63 6f 75 6e 74 65 72 73 20 61 0a  it encounters a.
0140: 23 20 63 6f 72 72 75 70 74 20 64 61 74 61 20 73  # corrupt data s
0150: 74 72 75 63 74 75 72 65 20 6f 6e 20 64 69 73 6b  tructure on disk
0160: 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72  ..#..set testdir
0170: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
0180: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
0190: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
01a0: 6c 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45  l..# If SQLITE_E
01b0: 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 6e 6f  NABLE_FTS3 is no
01c0: 74 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20  t defined, omit 
01d0: 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70  this file..ifcap
01e0: 61 62 6c 65 20 21 66 74 73 33 20 7b 20 66 69 6e  able !fts3 { fin
01f0: 69 73 68 5f 74 65 73 74 20 3b 20 72 65 74 75 72  ish_test ; retur
0200: 6e 20 7d 0a 0a 73 65 74 20 3a 3a 74 65 73 74 70  n }..set ::testp
0210: 72 65 66 69 78 20 66 74 73 33 63 6f 72 72 75 70  refix fts3corrup
0220: 74 32 0a 0a 73 65 74 20 64 61 74 61 20 5b 6c 69  t2..set data [li
0230: 73 74 5d 0a 6c 61 70 70 65 6e 64 20 64 61 74 61  st].lappend data
0240: 20 7b 2a 7d 7b 0a 20 20 20 22 61 6d 78 74 76 6f   {*}{.   "amxtvo
0250: 6f 20 61 64 71 77 72 6f 79 68 7a 20 61 75 71 20  o adqwroyhz auq 
0260: 61 69 74 68 74 69 72 20 61 76 6e 69 71 6e 75 79  aithtir avniqnuy
0270: 6e 76 66 20 61 78 70 20 61 68 69 62 61 79 66 79  nvf axp ahibayfy
0280: 6e 69 67 20 61 67 62 69 63 70 6d 22 0a 20 20 20  nig agbicpm".   
0290: 22 61 6a 64 74 65 62 73 20 61 6e 74 65 61 78 72  "ajdtebs anteaxr
02a0: 20 61 69 65 79 6e 65 6e 77 6d 64 20 61 77 70 6c   aieynenwmd awpl
02b0: 20 61 6c 6f 20 61 6b 78 63 72 77 6f 77 20 61 6f   alo akxcrwow ao
02c0: 78 66 74 67 65 20 61 6f 71 76 67 75 6c 22 0a 20  xftge aoqvgul". 
02d0: 20 20 22 61 6d 63 66 76 64 72 20 61 75 7a 20 61    "amcfvdr auz a
02e0: 70 75 20 61 65 62 65 6c 6d 20 61 68 75 78 79 7a  pu aebelm ahuxyz
02f0: 20 61 71 63 20 61 73 79 61 66 64 62 20 61 67 75   aqc asyafdb agu
0300: 6c 76 68 76 71 75 22 0a 20 20 20 22 61 70 65 70  lvhvqu".   "apep
0310: 77 66 79 7a 20 61 7a 6b 68 64 76 6b 77 20 61 65  wfyz azkhdvkw ae
0320: 6e 79 65 6c 78 7a 62 6b 20 61 73 6c 6e 69 74 62  nyelxzbk aslnitb
0330: 79 65 74 20 61 79 63 64 73 64 63 70 67 72 20 61  yet aycdsdcpgr a
0340: 71 7a 7a 64 62 63 20 61 67 66 69 20 61 78 6e 79  qzzdbc agfi axny
0350: 70 79 64 6f 75 22 0a 20 20 20 22 61 61 71 72 7a  pydou".   "aaqrz
0360: 7a 63 6d 20 61 70 63 78 64 78 6f 20 61 74 75 6d  zcm apcxdxo atum
0370: 6c 74 7a 6a 20 61 65 76 76 69 76 6f 20 61 6f 64  ltzj aevvivo aod
0380: 6b 6e 6f 66 74 20 61 71 6f 79 79 74 6f 7a 20 61  knoft aqoyytoz a
0390: 6c 6f 62 78 20 61 70 6c 64 74 22 0a 20 20 20 22  lobx apldt".   "
03a0: 61 64 6a 6c 6c 78 6c 68 6e 6d 6a 20 61 69 75 68  adjllxlhnmj aiuh
03b0: 76 75 6a 20 61 64 77 70 70 63 65 75 68 74 20 61  vuj adwppceuht a
03c0: 74 76 6a 20 61 7a 72 73 61 6d 20 61 68 6b 6a 71  tvj azrsam ahkjq
03d0: 64 68 6e 79 20 61 75 64 6c 71 78 72 20 61 6f 74  dhny audlqxr aot
03e0: 67 63 64 22 0a 20 20 20 22 61 69 72 61 20 61 7a  gcd".   "aira az
03f0: 66 6c 73 63 65 6f 73 20 61 77 6a 20 61 75 7a 62  flsceos awj auzb
0400: 6f 62 66 6b 63 20 61 77 6d 65 7a 70 6c 72 20 61  obfkc awmezplr a
0410: 65 68 20 61 77 65 63 20 61 68 6e 64 78 6c 6d 76  eh awec ahndxlmv
0420: 22 0a 20 20 20 22 61 79 64 77 6e 69 65 64 20 61  ".   "aydwnied a
0430: 6c 6b 20 61 75 6f 61 70 20 61 67 69 68 79 71 65  lk auoap agihyqe
0440: 69 78 20 61 79 6d 71 78 7a 61 6a 6e 6c 20 61 79  ix aymqxzajnl ay
0450: 64 77 6e 69 65 64 20 61 6f 6a 6b 61 72 78 20 61  dwnied aojkarx a
0460: 67 62 6f 22 0a 20 20 20 22 61 68 61 6a 73 6d 63  gbo".   "ahajsmc
0470: 6c 20 61 6e 76 78 20 61 6d 64 68 6a 6d 20 61 6f  l anvx amdhjm ao
0480: 70 74 73 6a 20 61 67 75 67 7a 6a 6a 6d 20 61 70  ptsj agugzjjm ap
0490: 6b 65 76 6d 20 61 63 6e 6a 20 61 63 6a 67 22 0a  kevm acnj acjg".
04a0: 20 20 20 22 61 6d 77 74 6b 77 20 61 6f 67 74 74     "amwtkw aogtt
04b0: 62 79 6b 76 74 20 61 75 62 77 72 66 71 6e 62 6a  bykvt aubwrfqnbj
04c0: 66 20 61 6a 6f 77 20 61 67 73 6a 20 61 65 72 6b  f ajow agsj aerk
04d0: 71 7a 6a 64 71 73 74 20 61 6e 65 6e 6c 76 62 61  qzjdqst anenlvba
04e0: 6c 6b 6e 20 61 72 66 61 6a 7a 7a 67 63 6b 78 22  lkn arfajzzgckx"
04f0: 0a 20 20 20 22 61 64 71 71 71 6f 66 6b 6d 7a 20  .   "adqqqofkmz 
0500: 61 6d 6a 70 61 76 6a 75 68 77 20 61 71 67 65 68  amjpavjuhw aqgeh
0510: 67 6e 62 20 61 77 76 76 78 6c 62 74 71 7a 6e 20  gnb awvvxlbtqzn 
0520: 61 67 73 74 71 6b 6f 20 61 6b 6d 6b 7a 65 68 79  agstqko akmkzehy
0530: 68 20 61 74 61 67 7a 65 79 20 61 67 77 6a 61 22  h atagzey agwja"
0540: 0a 20 20 20 22 61 6d 61 67 20 61 68 65 20 61 75  .   "amag ahe au
0550: 74 6b 6c 6c 79 77 68 72 20 61 76 6e 6b 20 61 74  tkllywhr avnk at
0560: 6d 74 20 61 6b 6e 20 61 6e 76 64 68 20 61 69 78  mt akn anvdh aix
0570: 66 72 76 22 0a 20 20 20 22 61 71 64 79 65 72 62  frv".   "aqdyerb
0580: 77 73 20 61 76 65 66 79 6b 6c 79 20 61 77 6c 20  ws avefykly awl 
0590: 61 7a 61 64 75 6f 6a 67 7a 6f 20 61 6e 78 66 73  azaduojgzo anxfs
05a0: 6d 77 20 61 78 70 74 20 61 62 67 62 76 6b 20 61  mw axpt abgbvk a
05b0: 74 69 22 0a 20 20 20 22 61 74 74 79 71 6b 77 7a  ti".   "attyqkwz
05c0: 20 61 69 77 65 79 70 69 63 7a 75 6c 20 61 66 79   aiweypiczul afy
05d0: 20 61 73 69 74 61 71 62 63 7a 68 68 20 61 69 74   asitaqbczhh ait
05e0: 78 69 73 69 7a 70 76 20 61 75 68 76 69 71 20 61  xisizpv auhviq a
05f0: 69 62 71 6c 20 61 6a 66 71 63 22 0a 20 20 20 22  ibql ajfqc".   "
0600: 61 79 6c 7a 70 72 74 6d 74 61 20 61 69 75 65 6d  aylzprtmta aiuem
0610: 69 68 71 72 70 69 20 61 77 6c 75 76 67 73 77 20  ihqrpi awluvgsw 
0620: 61 6d 70 62 75 79 20 61 78 6c 69 66 70 7a 66 71  ampbuy axlifpzfq
0630: 72 20 61 65 6d 73 20 61 6f 61 78 77 61 64 73 20  r aems aoaxwads 
0640: 61 70 69 61 6e 66 6e 22 0a 20 20 20 22 61 6f 64  apianfn".   "aod
0650: 72 6b 69 6a 65 6c 71 20 61 63 64 62 20 61 61 73  rkijelq acdb aas
0660: 65 72 72 64 78 6d 20 61 71 79 61 73 67 6f 66 71  errdxm aqyasgofq
0670: 75 20 61 65 76 76 69 76 6f 20 61 66 69 20 61 70  u aevvivo afi ap
0680: 6d 77 75 20 61 65 6f 71 79 73 6c 22 0a 20 20 20  mwu aeoqysl".   
0690: 22 61 6d 71 6e 6b 20 61 6e 6b 61 6f 74 6d 20 61  "amqnk ankaotm a
06a0: 79 66 79 20 61 6a 63 75 70 65 65 6f 63 20 61 64  yfy ajcupeeoc ad
06b0: 76 63 62 75 6b 61 6e 20 61 75 63 61 68 6c 77 6e  vcbukan aucahlwn
06c0: 79 6b 20 61 64 62 66 79 6f 20 61 7a 71 6a 70 65  yk adbfyo azqjpe
06d0: 61 6e 74 22 0a 20 20 20 22 61 66 63 7a 70 70 20  ant".   "afczpp 
06e0: 61 73 71 72 73 20 61 68 73 6c 76 64 61 20 61 6b  asqrs ahslvda ak
06f0: 68 6c 66 20 61 69 71 67 64 70 20 61 74 79 64 20  hlf aiqgdp atyd 
0700: 61 7a 6e 75 67 6c 78 71 62 72 67 20 61 77 69 72  aznuglxqbrg awir
0710: 6e 64 72 68 22 0a 20 20 20 22 61 71 68 69 61 6a  ndrh".   "aqhiaj
0720: 70 20 61 6d 78 65 61 7a 62 20 61 73 78 75 65 68  p amxeazb asxueh
0730: 67 20 61 6b 6f 64 20 61 78 76 6f 6c 76 73 70 20  g akod axvolvsp 
0740: 61 67 63 7a 20 61 73 6d 6f 76 6d 6f 68 79 20 61  agcz asmovmohy a
0750: 63 6d 71 61 22 0a 20 20 20 22 61 76 76 6f 6d 76  cmqa".   "avvomv
0760: 20 61 61 66 6d 73 20 61 73 68 75 61 65 63 20 61   aafms ashuaec a
0770: 72 65 76 78 20 61 75 64 74 71 20 61 6c 72 77 71  revx audtq alrwq
0780: 68 6a 76 61 6f 20 61 76 67 73 67 70 67 20 61 6a  hjvao avgsgpg aj
0790: 62 72 63 74 70 73 65 6c 22 0a 20 20 20 22 61 74  brctpsel".   "at
07a0: 78 6f 69 72 72 20 61 79 6f 70 62 6f 6f 62 71 64  xoirr ayopboobqd
07b0: 75 20 61 6a 75 6e 6e 74 75 61 20 61 72 68 20 61  u ajunntua arh a
07c0: 65 72 6e 69 6d 78 69 64 20 61 69 70 6c 6a 64 61  ernimxid aipljda
07d0: 20 61 67 6c 6f 20 61 65 66 6b 22 0a 20 20 20 22   aglo aefk".   "
07e0: 61 6f 6e 78 66 20 61 63 6d 6e 6e 6b 6e 61 20 61  aonxf acmnnkna a
07f0: 62 67 76 69 61 73 77 65 20 61 75 6c 76 63 62 76  bgviaswe aulvcbv
0800: 20 61 78 70 20 61 70 65 6d 67 61 6b 70 7a 6f 20   axp apemgakpzo 
0810: 61 69 62 71 6c 20 61 63 69 6f 61 69 64 22 0a 20  aibql acioaid". 
0820: 20 20 22 61 78 6f 20 61 6c 72 77 71 68 6a 76 61    "axo alrwqhjva
0830: 6f 20 61 79 71 6f 75 6e 66 74 64 7a 6c 20 61 7a  o ayqounftdzl az
0840: 6d 6f 61 6b 64 79 68 20 61 70 61 6a 7a 65 20 61  moakdyh apajze a
0850: 6a 6b 20 61 72 74 76 79 20 61 70 78 69 61 6d 79  jk artvy apxiamy
0860: 22 0a 20 20 20 22 61 79 6a 61 66 73 72 61 7a 20  ".   "ayjafsraz 
0870: 61 64 64 6a 6a 20 61 67 73 6a 20 61 73 65 6a 74  addjj agsj asejt
0880: 7a 69 71 77 73 20 61 63 61 74 76 68 65 67 75 20  ziqws acatvhegu 
0890: 61 6f 78 64 6a 71 62 6c 73 76 76 20 61 65 6b 64  aoxdjqblsvv aekd
08a0: 6d 6d 62 73 20 61 61 6f 62 65 22 0a 20 20 20 22  mmbs aaobe".   "
08b0: 61 62 6a 6a 76 7a 75 62 6b 77 74 20 61 6c 63 7a  abjjvzubkwt alcz
08c0: 76 20 61 74 69 20 61 77 7a 20 61 75 79 78 67 63  v ati awz auyxgc
08d0: 78 65 62 20 61 79 6d 6a 6f 79 6d 20 61 6e 71 6f  xeb aymjoym anqo
08e0: 75 6b 70 72 74 79 74 20 61 74 77 66 68 70 6d 62  ukprtyt atwfhpmb
08f0: 6f 6f 68 22 0a 20 20 20 22 61 6a 66 71 7a 20 61  ooh".   "ajfqz a
0900: 65 74 68 6c 67 69 72 20 61 63 6c 63 78 20 61 6f  ethlgir aclcx ao
0910: 77 6c 79 76 65 74 62 79 20 61 70 72 6f 71 6d 20  wlyvetby aproqm 
0920: 61 66 6a 6c 71 74 6b 76 20 61 6e 65 62 66 79 20  afjlqtkv anebfy 
0930: 61 6b 7a 72 63 70 66 72 72 76 77 22 0a 20 20 20  akzrcpfrrvw".   
0940: 22 61 6f 6c 65 64 66 6f 74 6d 20 61 69 77 6c 66  "aoledfotm aiwlf
0950: 6d 20 61 65 65 6a 6c 61 65 6a 20 61 6e 7a 20 61  m aeejlaej anz a
0960: 62 67 62 76 6b 20 61 6b 74 66 6e 20 61 61 79 6f  bgbvk aktfn aayo
0970: 68 20 61 6e 70 79 77 67 64 76 67 7a 22 0a 20 20  h anpywgdvgz".  
0980: 20 22 61 63 76 6d 6c 64 67 75 6c 64 20 61 73 64   "acvmldguld asd
0990: 76 7a 20 61 71 62 20 61 65 6f 6d 73 79 7a 79 75  vz aqb aeomsyzyu
09a0: 20 61 67 67 79 6c 68 70 72 62 64 7a 20 61 73 72   aggylhprbdz asr
09b0: 66 6b 77 7a 20 61 75 69 70 79 62 70 73 6e 20 61  fkwz auipybpsn a
09c0: 67 73 6e 73 7a 7a 66 62 22 0a 7d 0a 0a 73 71 6c  gsnszzfb".}..sql
09d0: 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64  ite3_db_config d
09e0: 62 20 44 45 46 45 4e 53 49 56 45 20 30 0a 64 6f  b DEFENSIVE 0.do
09f0: 5f 74 65 73 74 20 66 74 73 33 63 6f 72 72 75 70  _test fts3corrup
0a00: 74 32 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73  t2-1.0 {.  execs
0a10: 71 6c 20 42 45 47 49 4e 0a 20 20 65 78 65 63 73  ql BEGIN.  execs
0a20: 71 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54  ql { CREATE VIRT
0a30: 55 41 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49  UAL TABLE t2 USI
0a40: 4e 47 20 46 54 53 33 28 61 2c 20 62 29 3b 20 7d  NG FTS3(a, b); }
0a50: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
0a60: 45 52 54 20 49 4e 54 4f 20 74 32 28 74 32 29 20  ERT INTO t2(t2) 
0a70: 56 41 4c 55 45 53 28 27 6e 6f 64 65 73 69 7a 65  VALUES('nodesize
0a80: 3d 33 32 27 29 20 7d 0a 20 20 66 6f 72 65 61 63  =32') }.  foreac
0a90: 68 20 64 20 24 64 61 74 61 20 7b 0a 20 20 20 20  h d $data {.    
0aa0: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
0ab0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
0ac0: 24 64 2c 20 24 64 29 20 7d 0a 20 20 7d 0a 20 20  $d, $d) }.  }.  
0ad0: 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a 20  execsql COMMIT. 
0ae0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
0af0: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0b00: 74 32 5f 73 65 67 6d 65 6e 74 73 20 7d 0a 7d 20  t2_segments }.} 
0b10: 7b 31 36 33 7d 0a 0a 70 72 6f 63 20 73 65 74 5f  {163}..proc set_
0b20: 62 79 74 65 20 7b 62 6c 6f 62 20 62 79 74 65 20  byte {blob byte 
0b30: 76 61 6c 7d 20 7b 0a 20 20 62 69 6e 61 72 79 20  val} {.  binary 
0b40: 66 6f 72 6d 61 74 20 61 2a 63 61 2a 20 20 20 20  format a*ca*    
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b60: 20 20 20 20 20 5c 0a 20 20 20 20 20 20 5b 73 74       \.      [st
0b70: 72 69 6e 67 20 72 61 6e 67 65 20 24 62 6c 6f 62  ring range $blob
0b80: 20 30 20 5b 65 78 70 72 20 24 62 79 74 65 2d 31   0 [expr $byte-1
0b90: 5d 5d 20 20 20 5c 0a 20 20 20 20 20 20 24 76 61  ]]   \.      $va
0ba0: 6c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  l               
0bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bc0: 20 20 20 20 20 5c 0a 20 20 20 20 20 20 5b 73 74       \.      [st
0bd0: 72 69 6e 67 20 72 61 6e 67 65 20 24 62 6c 6f 62  ring range $blob
0be0: 20 5b 65 78 70 72 20 24 62 79 74 65 2b 31 5d 20   [expr $byte+1] 
0bf0: 65 6e 64 5d 20 5c 0a 7d 0a 0a 73 65 74 20 74 6e  end] \.}..set tn
0c00: 20 30 0a 73 65 74 20 63 20 32 35 36 0a 66 6f 72   0.set c 256.for
0c10: 65 61 63 68 20 7b 72 6f 77 69 64 20 73 7a 20 62  each {rowid sz b
0c20: 6c 6f 62 7d 20 5b 0a 20 20 64 62 20 65 76 61 6c  lob} [.  db eval
0c30: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
0c40: 6c 65 6e 67 74 68 28 62 6c 6f 63 6b 29 2c 20 62  length(block), b
0c50: 6c 6f 63 6b 20 46 52 4f 4d 20 74 32 5f 73 65 67  lock FROM t2_seg
0c60: 6d 65 6e 74 73 7d 0a 5d 20 7b 0a 20 20 69 6e 63  ments}.] {.  inc
0c70: 72 20 74 6e 0a 20 20 73 65 74 20 63 20 5b 65 78  r tn.  set c [ex
0c80: 70 72 20 28 28 24 63 2b 32 35 35 29 25 32 35 36  pr (($c+255)%256
0c90: 29 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  )].  for {set i 
0ca0: 30 7d 20 7b 24 69 20 3c 20 24 73 7a 7d 20 7b 69  0} {$i < $sz} {i
0cb0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74  ncr i} {.    set
0cc0: 20 62 32 20 5b 73 65 74 5f 62 79 74 65 20 24 62   b2 [set_byte $b
0cd0: 6c 6f 62 20 24 69 20 24 63 5d 0a 20 20 20 20 65  lob $i $c].    e
0ce0: 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20  xecsql { UPDATE 
0cf0: 74 32 5f 73 65 67 6d 65 6e 74 73 20 53 45 54 20  t2_segments SET 
0d00: 62 6c 6f 63 6b 20 3d 20 24 62 32 20 57 48 45 52  block = $b2 WHER
0d10: 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69 64  E rowid = $rowid
0d20: 20 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 66   }.    do_test f
0d30: 74 73 33 63 6f 72 72 75 70 74 32 2d 31 2e 24 74  ts3corrupt2-1.$t
0d40: 6e 2e 24 69 20 7b 0a 20 20 20 20 20 20 63 61 74  n.$i {.      cat
0d50: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a  chsql { SELECT *
0d60: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74   FROM t2 WHERE t
0d70: 32 20 4d 41 54 43 48 20 27 61 2a 27 20 7d 0a 20  2 MATCH 'a*' }. 
0d80: 20 20 20 20 20 73 65 74 20 7b 7d 20 7b 7d 0a 20       set {} {}. 
0d90: 20 20 20 7d 20 7b 7d 0a 20 20 7d 0a 20 20 65 78     } {}.  }.  ex
0da0: 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74  ecsql { UPDATE t
0db0: 32 5f 73 65 67 6d 65 6e 74 73 20 53 45 54 20 62  2_segments SET b
0dc0: 6c 6f 63 6b 20 3d 20 24 62 6c 6f 62 20 57 48 45  lock = $blob WHE
0dd0: 52 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69  RE rowid = $rowi
0de0: 64 20 7d 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 63  d }.}..foreach c
0df0: 20 7b 35 30 20 31 30 30 20 31 35 30 20 32 30 30   {50 100 150 200
0e00: 20 32 35 30 7d 20 7b 0a 20 20 66 6f 72 65 61 63   250} {.  foreac
0e10: 68 20 7b 72 6f 77 69 64 20 73 7a 20 62 6c 6f 62  h {rowid sz blob
0e20: 7d 20 5b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  } [.    db eval 
0e30: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 6c  {SELECT rowid, l
0e40: 65 6e 67 74 68 28 72 6f 6f 74 29 2c 20 72 6f 6f  ength(root), roo
0e50: 74 20 46 52 4f 4d 20 74 32 5f 73 65 67 64 69 72  t FROM t2_segdir
0e60: 7d 0a 20 20 5d 20 7b 0a 20 20 20 20 69 6e 63 72  }.  ] {.    incr
0e70: 20 74 6e 0a 20 20 20 20 66 6f 72 20 7b 73 65 74   tn.    for {set
0e80: 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 73 7a 7d   i 0} {$i < $sz}
0e90: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
0ea0: 20 20 73 65 74 20 62 32 20 5b 73 65 74 5f 62 79    set b2 [set_by
0eb0: 74 65 20 24 62 6c 6f 62 20 24 69 20 24 63 5d 0a  te $blob $i $c].
0ec0: 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20        execsql { 
0ed0: 55 50 44 41 54 45 20 74 32 5f 73 65 67 64 69 72  UPDATE t2_segdir
0ee0: 20 53 45 54 20 72 6f 6f 74 20 3d 20 24 62 32 20   SET root = $b2 
0ef0: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 24 72  WHERE rowid = $r
0f00: 6f 77 69 64 20 7d 0a 20 20 20 20 20 20 64 6f 5f  owid }.      do_
0f10: 74 65 73 74 20 66 74 73 33 63 6f 72 72 75 70 74  test fts3corrupt
0f20: 32 2d 32 2e 24 63 2e 24 74 6e 2e 24 69 20 7b 0a  2-2.$c.$tn.$i {.
0f30: 20 20 20 20 20 20 20 20 63 61 74 63 68 73 71 6c          catchsql
0f40: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
0f50: 20 74 32 20 57 48 45 52 45 20 74 32 20 4d 41 54   t2 WHERE t2 MAT
0f60: 43 48 20 27 61 2a 27 20 7d 0a 20 20 20 20 20 20  CH 'a*' }.      
0f70: 20 20 73 65 74 20 7b 7d 20 7b 7d 0a 20 20 20 20    set {} {}.    
0f80: 20 20 7d 20 7b 7d 0a 20 20 20 20 7d 0a 20 20 20    } {}.    }.   
0f90: 20 65 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54   execsql { UPDAT
0fa0: 45 20 74 32 5f 73 65 67 64 69 72 20 53 45 54 20  E t2_segdir SET 
0fb0: 72 6f 6f 74 20 3d 20 24 62 6c 6f 62 20 57 48 45  root = $blob WHE
0fc0: 52 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69  RE rowid = $rowi
0fd0: 64 20 7d 0a 20 20 7d 0a 7d 0a 0a 0a 0a 0a 0a 0a  d }.  }.}.......
0fe0: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.