/ Hex Artifact Content
Login

Artifact 6d96efae2f8a6af3eeaf283aba437e6d0e5447ba:


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 64 6f 5f  gsnszzfb".}..do_
09d0: 74 65 73 74 20 66 74 73 33 63 6f 72 72 75 70 74  test fts3corrupt
09e0: 32 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71  2-1.0 {.  execsq
09f0: 6c 20 42 45 47 49 4e 0a 20 20 65 78 65 63 73 71  l BEGIN.  execsq
0a00: 6c 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55  l { CREATE VIRTU
0a10: 41 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e  AL TABLE t2 USIN
0a20: 47 20 46 54 53 33 28 61 2c 20 62 29 3b 20 7d 0a  G FTS3(a, b); }.
0a30: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
0a40: 52 54 20 49 4e 54 4f 20 74 32 28 74 32 29 20 56  RT INTO t2(t2) V
0a50: 41 4c 55 45 53 28 27 6e 6f 64 65 73 69 7a 65 3d  ALUES('nodesize=
0a60: 33 32 27 29 20 7d 0a 20 20 66 6f 72 65 61 63 68  32') }.  foreach
0a70: 20 64 20 24 64 61 74 61 20 7b 0a 20 20 20 20 65   d $data {.    e
0a80: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
0a90: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 24  INTO t2 VALUES($
0aa0: 64 2c 20 24 64 29 20 7d 0a 20 20 7d 0a 20 20 65  d, $d) }.  }.  e
0ab0: 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20  xecsql COMMIT.  
0ac0: 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54  execsql { SELECT
0ad0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
0ae0: 32 5f 73 65 67 6d 65 6e 74 73 20 7d 0a 7d 20 7b  2_segments }.} {
0af0: 31 36 33 7d 0a 0a 70 72 6f 63 20 73 65 74 5f 62  163}..proc set_b
0b00: 79 74 65 20 7b 62 6c 6f 62 20 62 79 74 65 20 76  yte {blob byte v
0b10: 61 6c 7d 20 7b 0a 20 20 62 69 6e 61 72 79 20 66  al} {.  binary f
0b20: 6f 72 6d 61 74 20 61 2a 63 61 2a 20 20 20 20 20  ormat a*ca*     
0b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b40: 20 20 20 20 5c 0a 20 20 20 20 20 20 5b 73 74 72      \.      [str
0b50: 69 6e 67 20 72 61 6e 67 65 20 24 62 6c 6f 62 20  ing range $blob 
0b60: 30 20 5b 65 78 70 72 20 24 62 79 74 65 2d 31 5d  0 [expr $byte-1]
0b70: 5d 20 20 20 5c 0a 20 20 20 20 20 20 24 76 61 6c  ]   \.      $val
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ba0: 20 20 20 20 5c 0a 20 20 20 20 20 20 5b 73 74 72      \.      [str
0bb0: 69 6e 67 20 72 61 6e 67 65 20 24 62 6c 6f 62 20  ing range $blob 
0bc0: 5b 65 78 70 72 20 24 62 79 74 65 2b 31 5d 20 65  [expr $byte+1] e
0bd0: 6e 64 5d 20 5c 0a 7d 0a 0a 73 65 74 20 74 6e 20  nd] \.}..set tn 
0be0: 30 0a 73 65 74 20 63 20 32 35 36 0a 66 6f 72 65  0.set c 256.fore
0bf0: 61 63 68 20 7b 72 6f 77 69 64 20 73 7a 20 62 6c  ach {rowid sz bl
0c00: 6f 62 7d 20 5b 0a 20 20 64 62 20 65 76 61 6c 20  ob} [.  db eval 
0c10: 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 6c  {SELECT rowid, l
0c20: 65 6e 67 74 68 28 62 6c 6f 63 6b 29 2c 20 62 6c  ength(block), bl
0c30: 6f 63 6b 20 46 52 4f 4d 20 74 32 5f 73 65 67 6d  ock FROM t2_segm
0c40: 65 6e 74 73 7d 0a 5d 20 7b 0a 20 20 69 6e 63 72  ents}.] {.  incr
0c50: 20 74 6e 0a 20 20 73 65 74 20 63 20 5b 65 78 70   tn.  set c [exp
0c60: 72 20 28 28 24 63 2b 32 35 35 29 25 32 35 36 29  r (($c+255)%256)
0c70: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
0c80: 7d 20 7b 24 69 20 3c 20 24 73 7a 7d 20 7b 69 6e  } {$i < $sz} {in
0c90: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20  cr i} {.    set 
0ca0: 62 32 20 5b 73 65 74 5f 62 79 74 65 20 24 62 6c  b2 [set_byte $bl
0cb0: 6f 62 20 24 69 20 24 63 5d 0a 20 20 20 20 65 78  ob $i $c].    ex
0cc0: 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74  ecsql { UPDATE t
0cd0: 32 5f 73 65 67 6d 65 6e 74 73 20 53 45 54 20 62  2_segments SET b
0ce0: 6c 6f 63 6b 20 3d 20 24 62 32 20 57 48 45 52 45  lock = $b2 WHERE
0cf0: 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69 64 20   rowid = $rowid 
0d00: 7d 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 66 74  }.    do_test ft
0d10: 73 33 63 6f 72 72 75 70 74 32 2d 31 2e 24 74 6e  s3corrupt2-1.$tn
0d20: 2e 24 69 20 7b 0a 20 20 20 20 20 20 63 61 74 63  .$i {.      catc
0d30: 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  hsql { SELECT * 
0d40: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32  FROM t2 WHERE t2
0d50: 20 4d 41 54 43 48 20 27 61 2a 27 20 7d 0a 20 20   MATCH 'a*' }.  
0d60: 20 20 20 20 73 65 74 20 7b 7d 20 7b 7d 0a 20 20      set {} {}.  
0d70: 20 20 7d 20 7b 7d 0a 20 20 7d 0a 20 20 65 78 65    } {}.  }.  exe
0d80: 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 74 32  csql { UPDATE t2
0d90: 5f 73 65 67 6d 65 6e 74 73 20 53 45 54 20 62 6c  _segments SET bl
0da0: 6f 63 6b 20 3d 20 24 62 6c 6f 62 20 57 48 45 52  ock = $blob WHER
0db0: 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69 64  E rowid = $rowid
0dc0: 20 7d 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 63 20   }.}..foreach c 
0dd0: 7b 35 30 20 31 30 30 20 31 35 30 20 32 30 30 20  {50 100 150 200 
0de0: 32 35 30 7d 20 7b 0a 20 20 66 6f 72 65 61 63 68  250} {.  foreach
0df0: 20 7b 72 6f 77 69 64 20 73 7a 20 62 6c 6f 62 7d   {rowid sz blob}
0e00: 20 5b 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b   [.    db eval {
0e10: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 6c 65  SELECT rowid, le
0e20: 6e 67 74 68 28 72 6f 6f 74 29 2c 20 72 6f 6f 74  ngth(root), root
0e30: 20 46 52 4f 4d 20 74 32 5f 73 65 67 64 69 72 7d   FROM t2_segdir}
0e40: 0a 20 20 5d 20 7b 0a 20 20 20 20 69 6e 63 72 20  .  ] {.    incr 
0e50: 74 6e 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20  tn.    for {set 
0e60: 69 20 30 7d 20 7b 24 69 20 3c 20 24 73 7a 7d 20  i 0} {$i < $sz} 
0e70: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20  {incr i} {.     
0e80: 20 73 65 74 20 62 32 20 5b 73 65 74 5f 62 79 74   set b2 [set_byt
0e90: 65 20 24 62 6c 6f 62 20 24 69 20 24 63 5d 0a 20  e $blob $i $c]. 
0ea0: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 55       execsql { U
0eb0: 50 44 41 54 45 20 74 32 5f 73 65 67 64 69 72 20  PDATE t2_segdir 
0ec0: 53 45 54 20 72 6f 6f 74 20 3d 20 24 62 32 20 57  SET root = $b2 W
0ed0: 48 45 52 45 20 72 6f 77 69 64 20 3d 20 24 72 6f  HERE rowid = $ro
0ee0: 77 69 64 20 7d 0a 20 20 20 20 20 20 64 6f 5f 74  wid }.      do_t
0ef0: 65 73 74 20 66 74 73 33 63 6f 72 72 75 70 74 32  est fts3corrupt2
0f00: 2d 32 2e 24 63 2e 24 74 6e 2e 24 69 20 7b 0a 20  -2.$c.$tn.$i {. 
0f10: 20 20 20 20 20 20 20 63 61 74 63 68 73 71 6c 20         catchsql 
0f20: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
0f30: 74 32 20 57 48 45 52 45 20 74 32 20 4d 41 54 43  t2 WHERE t2 MATC
0f40: 48 20 27 61 2a 27 20 7d 0a 20 20 20 20 20 20 20  H 'a*' }.       
0f50: 20 73 65 74 20 7b 7d 20 7b 7d 0a 20 20 20 20 20   set {} {}.     
0f60: 20 7d 20 7b 7d 0a 20 20 20 20 7d 0a 20 20 20 20   } {}.    }.    
0f70: 65 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45  execsql { UPDATE
0f80: 20 74 32 5f 73 65 67 64 69 72 20 53 45 54 20 72   t2_segdir SET r
0f90: 6f 6f 74 20 3d 20 24 62 6c 6f 62 20 57 48 45 52  oot = $blob WHER
0fa0: 45 20 72 6f 77 69 64 20 3d 20 24 72 6f 77 69 64  E rowid = $rowid
0fb0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 0a 0a 0a 0a 0a 66   }.  }.}.......f
0fc0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.