/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 6c355cf70c4a308b1b84a11a65282bcac5b4038db77de5cfc8ad080ef371f109:


0000: 2f 2a 0a 2a 2a 20 32 30 31 38 2d 31 30 2d 32 36  /*.** 2018-10-26
0010: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74 68 6f  .**.** The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c 65 67  lace of.** a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 2a  is a blessing:.*
0080: 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f 75 20  *.**    May you 
0090: 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20  do good and not 
00a0: 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  evil..**    May 
00b0: 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65  you find forgive
00c0: 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c  ness for yoursel
00d0: 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74  f and forgive ot
00e0: 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61 79 20  hers..**    May 
00f0: 79 6f 75 20 73 68 61 72 65 20 66 72 65 65 6c 79  you share freely
0100: 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d  , never taking m
0110: 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76  ore than you giv
0120: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
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 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
0170: 2a 2a 0a 2a 2a 20 54 68 69 73 20 70 72 6f 67 72  **.** This progr
0180: 61 6d 20 69 73 20 64 65 73 69 67 6e 65 64 20 66  am is designed f
0190: 6f 72 20 66 75 7a 7a 2d 74 65 73 74 69 6e 67 20  or fuzz-testing 
01a0: 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20  SQLite database 
01b0: 66 69 6c 65 73 20 75 73 69 6e 67 0a 2a 2a 20 74  files using.** t
01c0: 68 65 20 2d 66 73 61 6e 69 74 69 7a 65 3d 66 75  he -fsanitize=fu
01d0: 7a 7a 65 72 20 6f 70 74 69 6f 6e 20 6f 66 20 63  zzer option of c
01e0: 6c 61 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lang..**.** The 
01f0: 2d 66 73 61 6e 69 74 69 7a 65 3d 66 75 7a 7a 65  -fsanitize=fuzze
0200: 72 20 6f 70 74 69 6f 6e 20 63 61 75 73 65 73 20  r option causes 
0210: 61 20 6d 61 69 6e 28 29 20 74 6f 20 62 65 20 69  a main() to be i
0220: 6e 73 65 72 74 65 64 20 61 75 74 6f 6d 61 74 69  nserted automati
0230: 63 61 6c 6c 79 2e 0a 2a 2a 20 54 68 61 74 20 6d  cally..** That m
0240: 61 69 6e 28 29 20 69 6e 76 6f 6b 65 73 20 4c 4c  ain() invokes LL
0250: 56 4d 46 75 7a 7a 65 72 54 65 73 74 4f 6e 65 49  VMFuzzerTestOneI
0260: 6e 70 75 74 28 44 2c 53 29 20 74 6f 20 62 65 20  nput(D,S) to be 
0270: 69 6e 76 6f 6b 65 64 20 72 65 70 65 61 74 65 64  invoked repeated
0280: 6c 79 2e 0a 2a 2a 20 45 61 63 68 20 44 20 69 73  ly..** Each D is
0290: 20 61 20 66 75 7a 7a 65 64 20 64 61 74 61 62 61   a fuzzed databa
02a0: 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 63 6f  se file.  The co
02b0: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
02c0: 72 75 6e 73 20 76 61 72 69 6f 75 73 0a 2a 2a 20  runs various.** 
02d0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61  SQL statements a
02e0: 67 61 69 6e 73 74 20 74 68 61 74 20 64 61 74 61  gainst that data
02f0: 62 61 73 65 2c 20 74 72 79 69 6e 67 20 74 6f 20  base, trying to 
0300: 70 72 6f 76 6f 6b 65 20 61 20 66 61 69 6c 75 72  provoke a failur
0310: 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 62 65 73  e..**.** For bes
0320: 74 20 72 65 73 75 6c 74 73 20 74 68 65 20 73 65  t results the se
0330: 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ed database file
0340: 73 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  s should have th
0350: 65 73 65 20 74 61 62 6c 65 73 3a 0a 2a 2a 0a 2a  ese tables:.**.*
0360: 2a 20 20 20 54 61 62 6c 65 20 22 74 31 22 20 77  *   Table "t1" w
0370: 69 74 68 20 63 6f 6c 75 6d 6e 73 20 22 61 22 20  ith columns "a" 
0380: 61 6e 64 20 22 62 22 0a 2a 2a 20 20 20 54 61 62  and "b".**   Tab
0390: 6c 65 73 20 22 74 32 22 20 61 6e 64 20 22 74 33  les "t2" and "t3
03a0: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6e   with the same n
03b0: 75 6d 62 65 72 20 6f 66 20 63 6f 6d 70 61 74 69  umber of compati
03c0: 62 6c 65 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 20  ble columns.**  
03d0: 20 20 20 20 20 22 74 33 22 20 73 68 6f 75 6c 64       "t3" should
03e0: 20 68 61 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6e   have a column n
03f0: 61 6d 65 73 20 22 78 22 0a 2a 2a 20 20 20 54 61  ames "x".**   Ta
0400: 62 6c 65 20 22 74 34 22 20 77 69 74 68 20 61 20  ble "t4" with a 
0410: 63 6f 6c 75 6d 6e 20 22 78 22 20 74 68 61 74 20  column "x" that 
0420: 69 73 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69  is compatible wi
0430: 74 68 20 74 33 2e 78 2e 0a 2a 2a 0a 2a 2a 20 41  th t3.x..**.** A
0440: 6e 79 20 6f 66 20 74 68 65 73 65 20 74 61 62 6c  ny of these tabl
0450: 65 73 20 63 61 6e 20 62 65 20 76 69 72 74 75 61  es can be virtua
0460: 6c 20 74 61 62 6c 65 73 2c 20 66 6f 72 20 65 78  l tables, for ex
0470: 61 6d 70 6c 65 20 46 54 53 20 6f 72 20 52 54 72  ample FTS or RTr
0480: 65 65 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a  ee tables..**.**
0490: 20 54 6f 20 72 75 6e 20 74 68 69 73 20 74 65 73   To run this tes
04a0: 74 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 6d 6b 64  t:.**.**     mkd
04b0: 69 72 20 64 69 72 0a 2a 2a 20 20 20 20 20 63 70  ir dir.**     cp
04c0: 20 64 62 66 75 7a 7a 32 2d 73 65 65 64 2a 2e 64   dbfuzz2-seed*.d
04d0: 62 20 64 69 72 0a 2a 2a 20 20 20 20 20 63 6c 61  b dir.**     cla
04e0: 6e 67 2d 36 2e 30 20 2d 49 2e 20 2d 67 20 2d 4f  ng-6.0 -I. -g -O
04f0: 31 20 2d 66 73 61 6e 69 74 69 7a 65 3d 66 75 7a  1 -fsanitize=fuz
0500: 7a 65 72 20 5c 0a 2a 2a 20 20 20 20 20 20 20 2d  zer \.**       -
0510: 44 54 48 52 45 41 44 53 41 46 45 3d 30 20 2d 44  DTHREADSAFE=0 -D
0520: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 45  SQLITE_ENABLE_DE
0530: 53 45 52 49 41 4c 49 5a 45 20 5c 0a 2a 2a 20 20  SERIALIZE \.**  
0540: 20 20 20 20 20 2d 44 53 51 4c 49 54 45 5f 45 4e       -DSQLITE_EN
0550: 41 42 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42  ABLE_DBSTAT_VTAB
0560: 20 64 62 66 75 7a 7a 32 2e 63 20 73 71 6c 69 74   dbfuzz2.c sqlit
0570: 65 33 2e 63 20 2d 6c 64 6c 0a 2a 2a 20 20 20 20  e3.c -ldl.**    
0580: 20 2e 2f 61 2e 6f 75 74 20 64 69 72 0a 2a 2f 0a   ./a.out dir.*/.
0590: 23 69 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74  #include <assert
05a0: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h>.#include <st
05b0: 64 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  dio.h>.#include 
05c0: 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c  <stdlib.h>.#incl
05d0: 75 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23  ude <string.h>.#
05e0: 69 6e 63 6c 75 64 65 20 3c 73 74 64 61 72 67 2e  include <stdarg.
05f0: 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 63 74 79  h>.#include <cty
0600: 70 65 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  pe.h>.#include <
0610: 73 74 64 69 6e 74 2e 68 3e 0a 23 69 66 6e 64 65  stdint.h>.#ifnde
0620: 66 20 5f 57 49 4e 33 32 0a 23 69 6e 63 6c 75 64  f _WIN32.#includ
0630: 65 20 3c 73 79 73 2f 74 69 6d 65 2e 68 3e 0a 23  e <sys/time.h>.#
0640: 69 6e 63 6c 75 64 65 20 3c 73 79 73 2f 72 65 73  include <sys/res
0650: 6f 75 72 63 65 2e 68 3e 0a 23 65 6e 64 69 66 0a  ource.h>.#endif.
0660: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0670: 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  3.h"../*.** This
0680: 20 69 73 20 74 68 65 20 69 73 20 74 68 65 20 53   is the is the S
0690: 51 4c 20 74 68 61 74 20 69 73 20 72 75 6e 20 61  QL that is run a
06a0: 67 61 69 6e 73 74 20 74 68 65 20 64 61 74 61 62  gainst the datab
06b0: 61 73 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 63  ase..*/.static c
06c0: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 53 71 6c  onst char *azSql
06d0: 5b 5d 20 3d 20 7b 0a 20 20 22 50 52 41 47 4d 41  [] = {.  "PRAGMA
06e0: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
06f0: 3b 22 2c 0a 20 20 22 53 45 4c 45 43 54 20 2a 20  ;",.  "SELECT * 
0700: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
0710: 65 72 3b 22 2c 0a 20 20 22 53 45 4c 45 43 54 20  er;",.  "SELECT 
0720: 73 75 6d 28 6c 65 6e 67 74 68 28 6e 61 6d 65 29  sum(length(name)
0730: 29 20 46 52 4f 4d 20 64 62 73 74 61 74 3b 22 2c  ) FROM dbstat;",
0740: 0a 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45  .  "UPDATE t1 SE
0750: 54 20 62 3d 61 2c 20 61 3d 62 20 57 48 45 52 45  T b=a, a=b WHERE
0760: 20 61 3c 62 3b 22 2c 0a 20 20 22 41 4c 54 45 52   a<b;",.  "ALTER
0770: 20 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45   TABLE t1 RENAME
0780: 20 54 4f 20 61 6c 6b 6a 61 6c 6b 6a 64 66 69 69   TO alkjalkjdfii
0790: 69 77 75 65 72 39 38 37 6c 6b 6a 77 65 72 38 32  iwuer987lkjwer82
07a0: 6d 78 39 37 73 66 39 38 37 38 38 73 39 37 38 39  mx97sf98788s9789
07b0: 73 3b 22 2c 0a 20 20 22 49 4e 53 45 52 54 20 49  s;",.  "INSERT I
07c0: 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20 2a 20  NTO t3 SELECT * 
07d0: 46 52 4f 4d 20 74 32 3b 22 2c 0a 20 20 22 44 45  FROM t2;",.  "DE
07e0: 4c 45 54 45 20 46 52 4f 4d 20 74 33 20 57 48 45  LETE FROM t3 WHE
07f0: 52 45 20 78 20 49 4e 20 28 53 45 4c 45 43 54 20  RE x IN (SELECT 
0800: 78 20 46 52 4f 4d 20 74 34 29 3b 22 2c 0a 20 20  x FROM t4);",.  
0810: 22 52 45 49 4e 44 45 58 3b 22 2c 0a 20 20 22 44  "REINDEX;",.  "D
0820: 52 4f 50 20 54 41 42 4c 45 20 74 33 3b 22 2c 0a  ROP TABLE t3;",.
0830: 20 20 22 56 41 43 55 55 4d 3b 22 2c 0a 7d 3b 0a    "VACUUM;",.};.
0840: 0a 2f 2a 20 4f 75 74 70 75 74 20 76 65 72 62 6f  ./* Output verbo
0850: 73 69 74 79 20 6c 65 76 65 6c 2e 20 20 30 20 6d  sity level.  0 m
0860: 65 61 6e 73 20 63 6f 6d 70 6c 65 74 65 20 73 69  eans complete si
0870: 6c 65 6e 63 65 20 2a 2f 0a 69 6e 74 20 65 56 65  lence */.int eVe
0880: 72 62 6f 73 69 74 79 20 3d 20 30 3b 0a 0a 2f 2a  rbosity = 0;../*
0890: 20 54 72 75 65 20 74 6f 20 61 63 74 69 76 61 74   True to activat
08a0: 65 20 50 52 41 47 4d 41 20 76 64 62 65 5f 64 65  e PRAGMA vdbe_de
08b0: 62 75 67 3d 6f 6e 20 2a 2f 0a 73 74 61 74 69 63  bug=on */.static
08c0: 20 69 6e 74 20 62 56 64 62 65 44 65 62 75 67 20   int bVdbeDebug 
08d0: 3d 20 30 3b 0a 0a 2f 2a 20 4d 61 78 69 6d 75 6d  = 0;../* Maximum
08e0: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 69 6e 2d   size of the in-
08f0: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 20  memory database 
0900: 66 69 6c 65 20 2a 2f 0a 73 74 61 74 69 63 20 73  file */.static s
0910: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d  qlite3_int64 szM
0920: 61 78 20 3d 20 31 30 34 38 35 37 36 30 30 3b 0a  ax = 104857600;.
0930: 0a 2f 2a 20 50 72 6f 67 72 65 73 73 20 68 61 6e  ./* Progress han
0940: 64 6c 65 72 20 63 61 6c 6c 62 61 63 6b 20 64 61  dler callback da
0950: 74 61 20 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ta */.static int
0960: 20 6e 43 62 20 3d 20 30 3b 20 20 20 20 20 20 20   nCb = 0;       
0970: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
0980: 6d 62 65 72 20 6f 66 20 63 61 6c 6c 62 61 63 6b  mber of callback
0990: 73 20 73 65 65 6e 20 73 6f 20 66 61 72 20 2a 2f  s seen so far */
09a0: 0a 73 74 61 74 69 63 20 69 6e 74 20 6d 78 43 62  .static int mxCb
09b0: 20 3d 20 32 35 30 30 30 30 3b 20 20 20 20 20 20   = 250000;      
09c0: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
09d0: 20 61 6c 6c 6f 77 65 64 20 63 61 6c 6c 62 61 63   allowed callbac
09e0: 6b 73 20 2a 2f 0a 0a 2f 2a 2a 2a 2a 2a 20 43 6f  ks */../***** Co
09f0: 70 79 2f 70 61 73 74 65 20 66 72 6f 6d 20 65 78  py/paste from ex
0a00: 74 2f 6d 69 73 63 2f 6d 65 6d 74 72 61 63 65 2e  t/misc/memtrace.
0a10: 63 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  c **************
0a20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 2f  *************/./
0a30: 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 6d  * The original m
0a40: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
0a50: 20 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 73 74 61   routines */.sta
0a60: 74 69 63 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f  tic sqlite3_mem_
0a70: 6d 65 74 68 6f 64 73 20 6d 65 6d 74 72 61 63 65  methods memtrace
0a80: 42 61 73 65 3b 0a 73 74 61 74 69 63 20 46 49 4c  Base;.static FIL
0a90: 45 20 2a 6d 65 6d 74 72 61 63 65 4f 75 74 3b 0a  E *memtraceOut;.
0aa0: 0a 2f 2a 20 4d 65 74 68 6f 64 73 20 74 68 61 74  ./* Methods that
0ab0: 20 74 72 61 63 65 20 6d 65 6d 6f 72 79 20 61 6c   trace memory al
0ac0: 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 73 74 61  locations */.sta
0ad0: 74 69 63 20 76 6f 69 64 20 2a 6d 65 6d 74 72 61  tic void *memtra
0ae0: 63 65 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e 29 7b  ceMalloc(int n){
0af0: 0a 20 20 69 66 28 20 6d 65 6d 74 72 61 63 65 4f  .  if( memtraceO
0b00: 75 74 20 29 7b 0a 20 20 20 20 66 70 72 69 6e 74  ut ){.    fprint
0b10: 66 28 6d 65 6d 74 72 61 63 65 4f 75 74 2c 20 22  f(memtraceOut, "
0b20: 4d 45 4d 54 52 41 43 45 3a 20 61 6c 6c 6f 63 61  MEMTRACE: alloca
0b30: 74 65 20 25 64 20 62 79 74 65 73 5c 6e 22 2c 20  te %d bytes\n", 
0b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 65 6d  .            mem
0b50: 74 72 61 63 65 42 61 73 65 2e 78 52 6f 75 6e 64  traceBase.xRound
0b60: 75 70 28 6e 29 29 3b 0a 20 20 7d 0a 20 20 72 65  up(n));.  }.  re
0b70: 74 75 72 6e 20 6d 65 6d 74 72 61 63 65 42 61 73  turn memtraceBas
0b80: 65 2e 78 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 7d 0a  e.xMalloc(n);.}.
0b90: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 74  static void memt
0ba0: 72 61 63 65 46 72 65 65 28 76 6f 69 64 20 2a 70  raceFree(void *p
0bb0: 29 7b 0a 20 20 69 66 28 20 70 3d 3d 30 20 29 20  ){.  if( p==0 ) 
0bc0: 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 65  return;.  if( me
0bd0: 6d 74 72 61 63 65 4f 75 74 20 29 7b 0a 20 20 20  mtraceOut ){.   
0be0: 20 66 70 72 69 6e 74 66 28 6d 65 6d 74 72 61 63   fprintf(memtrac
0bf0: 65 4f 75 74 2c 20 22 4d 45 4d 54 52 41 43 45 3a  eOut, "MEMTRACE:
0c00: 20 66 72 65 65 20 25 64 20 62 79 74 65 73 5c 6e   free %d bytes\n
0c10: 22 2c 20 6d 65 6d 74 72 61 63 65 42 61 73 65 2e  ", memtraceBase.
0c20: 78 53 69 7a 65 28 70 29 29 3b 0a 20 20 7d 0a 20  xSize(p));.  }. 
0c30: 20 6d 65 6d 74 72 61 63 65 42 61 73 65 2e 78 46   memtraceBase.xF
0c40: 72 65 65 28 70 29 3b 0a 7d 0a 73 74 61 74 69 63  ree(p);.}.static
0c50: 20 76 6f 69 64 20 2a 6d 65 6d 74 72 61 63 65 52   void *memtraceR
0c60: 65 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 2c 20  ealloc(void *p, 
0c70: 69 6e 74 20 6e 29 7b 0a 20 20 69 66 28 20 70 3d  int n){.  if( p=
0c80: 3d 30 20 29 20 72 65 74 75 72 6e 20 6d 65 6d 74  =0 ) return memt
0c90: 72 61 63 65 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20  raceMalloc(n);. 
0ca0: 20 69 66 28 20 6e 3d 3d 30 20 29 7b 0a 20 20 20   if( n==0 ){.   
0cb0: 20 6d 65 6d 74 72 61 63 65 46 72 65 65 28 70 29   memtraceFree(p)
0cc0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  ;.    return 0;.
0cd0: 20 20 7d 0a 20 20 69 66 28 20 6d 65 6d 74 72 61    }.  if( memtra
0ce0: 63 65 4f 75 74 20 29 7b 0a 20 20 20 20 66 70 72  ceOut ){.    fpr
0cf0: 69 6e 74 66 28 6d 65 6d 74 72 61 63 65 4f 75 74  intf(memtraceOut
0d00: 2c 20 22 4d 45 4d 54 52 41 43 45 3a 20 72 65 73  , "MEMTRACE: res
0d10: 69 7a 65 20 25 64 20 2d 3e 20 25 64 20 62 79 74  ize %d -> %d byt
0d20: 65 73 5c 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  es\n",.         
0d30: 20 20 20 6d 65 6d 74 72 61 63 65 42 61 73 65 2e     memtraceBase.
0d40: 78 53 69 7a 65 28 70 29 2c 20 6d 65 6d 74 72 61  xSize(p), memtra
0d50: 63 65 42 61 73 65 2e 78 52 6f 75 6e 64 75 70 28  ceBase.xRoundup(
0d60: 6e 29 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  n));.  }.  retur
0d70: 6e 20 6d 65 6d 74 72 61 63 65 42 61 73 65 2e 78  n memtraceBase.x
0d80: 52 65 61 6c 6c 6f 63 28 70 2c 20 6e 29 3b 0a 7d  Realloc(p, n);.}
0d90: 0a 73 74 61 74 69 63 20 69 6e 74 20 6d 65 6d 74  .static int memt
0da0: 72 61 63 65 53 69 7a 65 28 76 6f 69 64 20 2a 70  raceSize(void *p
0db0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 6d 65 6d 74  ){.  return memt
0dc0: 72 61 63 65 42 61 73 65 2e 78 53 69 7a 65 28 70  raceBase.xSize(p
0dd0: 29 3b 0a 7d 0a 73 74 61 74 69 63 20 69 6e 74 20  );.}.static int 
0de0: 6d 65 6d 74 72 61 63 65 52 6f 75 6e 64 75 70 28  memtraceRoundup(
0df0: 69 6e 74 20 6e 29 7b 0a 20 20 72 65 74 75 72 6e  int n){.  return
0e00: 20 6d 65 6d 74 72 61 63 65 42 61 73 65 2e 78 52   memtraceBase.xR
0e10: 6f 75 6e 64 75 70 28 6e 29 3b 0a 7d 0a 73 74 61  oundup(n);.}.sta
0e20: 74 69 63 20 69 6e 74 20 6d 65 6d 74 72 61 63 65  tic int memtrace
0e30: 49 6e 69 74 28 76 6f 69 64 20 2a 70 29 7b 0a 20  Init(void *p){. 
0e40: 20 72 65 74 75 72 6e 20 6d 65 6d 74 72 61 63 65   return memtrace
0e50: 42 61 73 65 2e 78 49 6e 69 74 28 70 29 3b 0a 7d  Base.xInit(p);.}
0e60: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d  .static void mem
0e70: 74 72 61 63 65 53 68 75 74 64 6f 77 6e 28 76 6f  traceShutdown(vo
0e80: 69 64 20 2a 70 29 7b 0a 20 20 6d 65 6d 74 72 61  id *p){.  memtra
0e90: 63 65 42 61 73 65 2e 78 53 68 75 74 64 6f 77 6e  ceBase.xShutdown
0ea0: 28 70 29 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73  (p);.}../* The s
0eb0: 75 62 73 74 69 74 75 74 65 20 6d 65 6d 6f 72 79  ubstitute memory
0ec0: 20 61 6c 6c 6f 63 61 74 6f 72 20 2a 2f 0a 73 74   allocator */.st
0ed0: 61 74 69 63 20 73 71 6c 69 74 65 33 5f 6d 65 6d  atic sqlite3_mem
0ee0: 5f 6d 65 74 68 6f 64 73 20 65 72 73 61 7a 74 4d  _methods ersaztM
0ef0: 65 74 68 6f 64 73 20 3d 20 7b 0a 20 20 6d 65 6d  ethods = {.  mem
0f00: 74 72 61 63 65 4d 61 6c 6c 6f 63 2c 0a 20 20 6d  traceMalloc,.  m
0f10: 65 6d 74 72 61 63 65 46 72 65 65 2c 0a 20 20 6d  emtraceFree,.  m
0f20: 65 6d 74 72 61 63 65 52 65 61 6c 6c 6f 63 2c 0a  emtraceRealloc,.
0f30: 20 20 6d 65 6d 74 72 61 63 65 53 69 7a 65 2c 0a    memtraceSize,.
0f40: 20 20 6d 65 6d 74 72 61 63 65 52 6f 75 6e 64 75    memtraceRoundu
0f50: 70 2c 0a 20 20 6d 65 6d 74 72 61 63 65 49 6e 69  p,.  memtraceIni
0f60: 74 2c 0a 20 20 6d 65 6d 74 72 61 63 65 53 68 75  t,.  memtraceShu
0f70: 74 64 6f 77 6e 0a 7d 3b 0a 0a 2f 2a 20 42 65 67  tdown.};../* Beg
0f80: 69 6e 20 74 72 61 63 69 6e 67 20 6d 65 6d 6f 72  in tracing memor
0f90: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 6f  y allocations to
0fa0: 20 6f 75 74 2e 20 2a 2f 0a 69 6e 74 20 73 71 6c   out. */.int sql
0fb0: 69 74 65 33 4d 65 6d 54 72 61 63 65 41 63 74 69  ite3MemTraceActi
0fc0: 76 61 74 65 28 46 49 4c 45 20 2a 6f 75 74 29 7b  vate(FILE *out){
0fd0: 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51 4c 49  .  int rc = SQLI
0fe0: 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 6d 65 6d  TE_OK;.  if( mem
0ff0: 74 72 61 63 65 42 61 73 65 2e 78 4d 61 6c 6c 6f  traceBase.xMallo
1000: 63 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  c==0 ){.    rc =
1010: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
1020: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45  SQLITE_CONFIG_GE
1030: 54 4d 41 4c 4c 4f 43 2c 20 26 6d 65 6d 74 72 61  TMALLOC, &memtra
1040: 63 65 42 61 73 65 29 3b 0a 20 20 20 20 69 66 28  ceBase);.    if(
1050: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1060: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
1070: 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49  ite3_config(SQLI
1080: 54 45 5f 43 4f 4e 46 49 47 5f 4d 41 4c 4c 4f 43  TE_CONFIG_MALLOC
1090: 2c 20 26 65 72 73 61 7a 74 4d 65 74 68 6f 64 73  , &ersaztMethods
10a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 6d  );.    }.  }.  m
10b0: 65 6d 74 72 61 63 65 4f 75 74 20 3d 20 6f 75 74  emtraceOut = out
10c0: 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 7d  ;.  return rc;.}
10d0: 0a 0a 2f 2a 20 44 65 61 63 74 69 76 61 74 65 20  ../* Deactivate 
10e0: 6d 65 6d 6f 72 79 20 74 72 61 63 69 6e 67 20 2a  memory tracing *
10f0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d  /.int sqlite3Mem
1100: 54 72 61 63 65 44 65 61 63 74 69 76 61 74 65 28  TraceDeactivate(
1110: 76 6f 69 64 29 7b 0a 20 20 69 6e 74 20 72 63 20  void){.  int rc 
1120: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  = SQLITE_OK;.  i
1130: 66 28 20 6d 65 6d 74 72 61 63 65 42 61 73 65 2e  f( memtraceBase.
1140: 78 4d 61 6c 6c 6f 63 21 3d 30 20 29 7b 0a 20 20  xMalloc!=0 ){.  
1150: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
1160: 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
1170: 46 49 47 5f 4d 41 4c 4c 4f 43 2c 20 26 6d 65 6d  FIG_MALLOC, &mem
1180: 74 72 61 63 65 42 61 73 65 29 3b 0a 20 20 20 20  traceBase);.    
1190: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
11a0: 4b 20 29 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65  K ){.      memse
11b0: 74 28 26 6d 65 6d 74 72 61 63 65 42 61 73 65 2c  t(&memtraceBase,
11c0: 20 30 2c 20 73 69 7a 65 6f 66 28 6d 65 6d 74 72   0, sizeof(memtr
11d0: 61 63 65 42 61 73 65 29 29 3b 0a 20 20 20 20 7d  aceBase));.    }
11e0: 0a 20 20 7d 0a 20 20 6d 65 6d 74 72 61 63 65 4f  .  }.  memtraceO
11f0: 75 74 20 3d 20 30 3b 0a 20 20 72 65 74 75 72 6e  ut = 0;.  return
1200: 20 72 63 3b 0a 7d 0a 2f 2a 2a 2a 2a 2a 20 45 6e   rc;.}./***** En
1210: 64 20 63 6f 70 79 2f 70 61 73 74 65 20 66 72 6f  d copy/paste fro
1220: 6d 20 65 78 74 2f 6d 69 73 63 2f 6d 65 6d 74 72  m ext/misc/memtr
1230: 61 63 65 2e 63 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ace.c **********
1240: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1250: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 67 72 65  */../*.** Progre
1260: 73 73 20 68 61 6e 64 6c 65 72 20 63 61 6c 6c 62  ss handler callb
1270: 61 63 6b 0a 2a 2a 0a 2a 2a 20 43 6f 75 6e 74 20  ack.**.** Count 
1280: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 61  the number of ca
1290: 6c 6c 62 61 63 6b 73 20 61 6e 64 20 63 61 75 73  llbacks and caus
12a0: 65 20 61 6e 20 61 62 6f 72 74 20 6f 6e 63 65 20  e an abort once 
12b0: 74 68 65 20 6c 69 6d 69 74 20 69 73 0a 2a 2a 20  the limit is.** 
12c0: 72 65 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 61 74  reached..*/.stat
12d0: 69 63 20 69 6e 74 20 70 72 6f 67 72 65 73 73 5f  ic int progress_
12e0: 68 61 6e 64 6c 65 72 28 76 6f 69 64 20 2a 70 4e  handler(void *pN
12f0: 6f 74 55 73 65 64 29 7b 0a 20 20 6e 43 62 2b 2b  otUsed){.  nCb++
1300: 3b 0a 20 20 69 66 28 20 6e 43 62 3c 6d 78 43 62  ;.  if( nCb<mxCb
1310: 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 69   ) return 0;.  i
1320: 66 28 20 65 56 65 72 62 6f 73 69 74 79 3e 3d 31  f( eVerbosity>=1
1330: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
1340: 2d 2d 20 50 72 6f 67 72 65 73 73 20 6c 69 6d 69  -- Progress limi
1350: 74 20 6f 66 20 25 64 20 72 65 61 63 68 65 64 5c  t of %d reached\
1360: 6e 22 2c 20 6d 78 43 62 29 3b 0a 20 20 7d 0a 20  n", mxCb);.  }. 
1370: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
1380: 20 6c 69 62 46 75 7a 7a 65 72 20 69 6e 76 6f 6b   libFuzzer invok
1390: 65 73 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20  es this routine 
13a0: 77 69 74 68 20 66 75 7a 7a 65 64 20 64 61 74 61  with fuzzed data
13b0: 62 61 73 65 20 66 69 6c 65 73 20 28 69 6e 20 61  base files (in a
13c0: 44 61 74 61 29 2e 0a 2a 2a 20 54 68 69 73 20 72  Data)..** This r
13d0: 6f 75 74 69 6e 65 20 72 75 6e 20 53 51 4c 69 74  outine run SQLit
13e0: 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 6d 61  e against the ma
13f0: 6c 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65  lformed database
1400: 20 74 6f 20 73 65 65 20 69 66 20 69 74 0a 2a 2a   to see if it.**
1410: 20 63 61 6e 20 70 72 6f 76 6f 6b 65 20 61 20 66   can provoke a f
1420: 61 69 6c 75 72 65 20 6f 72 20 6d 61 6c 66 75 6e  ailure or malfun
1430: 63 74 69 6f 6e 2e 0a 2a 2f 0a 69 6e 74 20 4c 4c  ction..*/.int LL
1440: 56 4d 46 75 7a 7a 65 72 54 65 73 74 4f 6e 65 49  VMFuzzerTestOneI
1450: 6e 70 75 74 28 63 6f 6e 73 74 20 75 69 6e 74 38  nput(const uint8
1460: 5f 74 20 2a 61 44 61 74 61 2c 20 73 69 7a 65 5f  _t *aData, size_
1470: 74 20 6e 42 79 74 65 29 7b 0a 20 20 75 6e 73 69  t nByte){.  unsi
1480: 67 6e 65 64 20 63 68 61 72 20 2a 61 3b 0a 20 20  gned char *a;.  
1490: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 69  sqlite3 *db;.  i
14a0: 6e 74 20 72 63 3b 0a 20 20 69 6e 74 20 69 3b 0a  nt rc;.  int i;.
14b0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
14c0: 78 3b 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 20  x;.  char *zErr 
14d0: 3d 20 30 3b 0a 0a 20 20 69 66 28 20 65 56 65 72  = 0;..  if( eVer
14e0: 62 6f 73 69 74 79 3e 3d 31 20 29 7b 0a 20 20 20  bosity>=1 ){.   
14f0: 20 70 72 69 6e 74 66 28 22 2a 2a 2a 2a 2a 2a 2a   printf("*******
1500: 2a 2a 2a 2a 2a 2a 2a 20 6e 42 79 74 65 3d 25 64  ******* nByte=%d
1510: 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
1520: 5c 6e 22 2c 20 28 69 6e 74 29 6e 42 79 74 65 29  \n", (int)nByte)
1530: 3b 0a 20 20 20 20 66 66 6c 75 73 68 28 73 74 64  ;.    fflush(std
1540: 6f 75 74 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  out);.  }.  if( 
1550: 73 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69  sqlite3_initiali
1560: 7a 65 28 29 20 29 20 72 65 74 75 72 6e 20 30 3b  ze() ) return 0;
1570: 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f  .  rc = sqlite3_
1580: 6f 70 65 6e 28 30 2c 20 26 64 62 29 3b 0a 20 20  open(0, &db);.  
1590: 69 66 28 20 72 63 20 29 20 72 65 74 75 72 6e 20  if( rc ) return 
15a0: 31 3b 0a 20 20 61 20 3d 20 73 71 6c 69 74 65 33  1;.  a = sqlite3
15b0: 5f 6d 61 6c 6c 6f 63 36 34 28 6e 42 79 74 65 2b  _malloc64(nByte+
15c0: 31 29 3b 0a 20 20 69 66 28 20 61 3d 3d 30 20 29  1);.  if( a==0 )
15d0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 6d 65 6d   return 1;.  mem
15e0: 63 70 79 28 61 2c 20 61 44 61 74 61 2c 20 6e 42  cpy(a, aData, nB
15f0: 79 74 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  yte);.  sqlite3_
1600: 64 65 73 65 72 69 61 6c 69 7a 65 28 64 62 2c 20  deserialize(db, 
1610: 22 6d 61 69 6e 22 2c 20 61 2c 20 6e 42 79 74 65  "main", a, nByte
1620: 2c 20 6e 42 79 74 65 2c 0a 20 20 20 20 20 20 20  , nByte,.       
1630: 20 53 51 4c 49 54 45 5f 44 45 53 45 52 49 41 4c   SQLITE_DESERIAL
1640: 49 5a 45 5f 52 45 53 49 5a 45 41 42 4c 45 20 7c  IZE_RESIZEABLE |
1650: 0a 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .        SQLITE_
1660: 44 45 53 45 52 49 41 4c 49 5a 45 5f 46 52 45 45  DESERIALIZE_FREE
1670: 4f 4e 43 4c 4f 53 45 29 3b 0a 20 20 78 20 3d 20  ONCLOSE);.  x = 
1680: 73 7a 4d 61 78 3b 0a 23 69 66 64 65 66 20 53 51  szMax;.#ifdef SQ
1690: 4c 49 54 45 5f 46 43 4e 54 4c 5f 53 49 5a 45 5f  LITE_FCNTL_SIZE_
16a0: 4c 49 4d 49 54 0a 20 20 73 71 6c 69 74 65 33 5f  LIMIT.  sqlite3_
16b0: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
16c0: 20 22 6d 61 69 6e 22 2c 20 53 51 4c 49 54 45 5f   "main", SQLITE_
16d0: 46 43 4e 54 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54  FCNTL_SIZE_LIMIT
16e0: 2c 20 26 78 29 3b 0a 23 65 6e 64 69 66 0a 20 20  , &x);.#endif.  
16f0: 69 66 28 20 62 56 64 62 65 44 65 62 75 67 20 29  if( bVdbeDebug )
1700: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 65 78  {.    sqlite3_ex
1710: 65 63 28 64 62 2c 20 22 50 52 41 47 4d 41 20 76  ec(db, "PRAGMA v
1720: 64 62 65 5f 64 65 62 75 67 3d 4f 4e 22 2c 20 30  dbe_debug=ON", 0
1730: 2c 20 30 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 69  , 0, 0);.  }.  i
1740: 66 28 20 6d 78 43 62 3e 30 20 29 7b 0a 20 20 20  f( mxCb>0 ){.   
1750: 20 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73   sqlite3_progres
1760: 73 5f 68 61 6e 64 6c 65 72 28 64 62 2c 20 31 30  s_handler(db, 10
1770: 2c 20 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c  , progress_handl
1780: 65 72 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 66 6f  er, 0);.  }.  fo
1790: 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  r(i=0; i<sizeof(
17a0: 61 7a 53 71 6c 29 2f 73 69 7a 65 6f 66 28 61 7a  azSql)/sizeof(az
17b0: 53 71 6c 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a 20  Sql[0]); i++){. 
17c0: 20 20 20 69 66 28 20 65 56 65 72 62 6f 73 69 74     if( eVerbosit
17d0: 79 3e 3d 31 20 29 7b 0a 20 20 20 20 20 20 70 72  y>=1 ){.      pr
17e0: 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 7a 53  intf("%s\n", azS
17f0: 71 6c 5b 69 5d 29 3b 0a 20 20 20 20 20 20 66 66  ql[i]);.      ff
1800: 6c 75 73 68 28 73 74 64 6f 75 74 29 3b 0a 20 20  lush(stdout);.  
1810: 20 20 7d 0a 20 20 20 20 7a 45 72 72 20 3d 20 30    }.    zErr = 0
1820: 3b 0a 20 20 20 20 6e 43 62 20 3d 20 30 3b 0a 20  ;.    nCb = 0;. 
1830: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
1840: 65 78 65 63 28 64 62 2c 20 61 7a 53 71 6c 5b 69  exec(db, azSql[i
1850: 5d 2c 20 30 2c 20 30 2c 20 26 7a 45 72 72 29 3b  ], 0, 0, &zErr);
1860: 0a 20 20 20 20 69 66 28 20 72 63 20 26 26 20 65  .    if( rc && e
1870: 56 65 72 62 6f 73 69 74 79 3e 3d 31 20 29 7b 0a  Verbosity>=1 ){.
1880: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 2d 2d        printf("--
1890: 20 72 63 3d 25 64 20 7a 45 72 72 3d 25 73 5c 6e   rc=%d zErr=%s\n
18a0: 22 2c 20 72 63 2c 20 7a 45 72 72 29 3b 0a 20 20  ", rc, zErr);.  
18b0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
18c0: 66 72 65 65 28 7a 45 72 72 29 3b 0a 20 20 7d 0a  free(zErr);.  }.
18d0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 63    rc = sqlite3_c
18e0: 6c 6f 73 65 28 64 62 29 3b 0a 20 20 69 66 28 20  lose(db);.  if( 
18f0: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1900: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
1910: 6f 75 74 2c 20 22 73 71 6c 69 74 65 33 5f 63 6c  out, "sqlite3_cl
1920: 6f 73 65 28 29 20 72 65 74 75 72 6e 73 20 25 64  ose() returns %d
1930: 5c 6e 22 2c 20 72 63 29 3b 0a 20 20 7d 0a 20 20  \n", rc);.  }.  
1940: 69 66 28 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  if( sqlite3_memo
1950: 72 79 5f 75 73 65 64 28 29 21 3d 30 20 29 7b 0a  ry_used()!=0 ){.
1960: 20 20 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 20 3d      int nAlloc =
1970: 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 4e 6f 74   0;.    int nNot
1980: 55 73 65 64 20 3d 20 30 3b 0a 20 20 20 20 73 71  Used = 0;.    sq
1990: 6c 69 74 65 33 5f 73 74 61 74 75 73 28 53 51 4c  lite3_status(SQL
19a0: 49 54 45 5f 53 54 41 54 55 53 5f 4d 41 4c 4c 4f  ITE_STATUS_MALLO
19b0: 43 5f 43 4f 55 4e 54 2c 20 26 6e 41 6c 6c 6f 63  C_COUNT, &nAlloc
19c0: 2c 20 26 6e 4e 6f 74 55 73 65 64 2c 20 30 29 3b  , &nNotUsed, 0);
19d0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
19e0: 65 72 72 2c 22 4d 65 6d 6f 72 79 20 6c 65 61 6b  err,"Memory leak
19f0: 3a 20 25 6c 6c 64 20 62 79 74 65 73 20 69 6e 20  : %lld bytes in 
1a00: 25 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 5c 6e  %d allocations\n
1a10: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ",.            s
1a20: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73  qlite3_memory_us
1a30: 65 64 28 29 2c 20 6e 41 6c 6c 6f 63 29 3b 0a 20  ed(), nAlloc);. 
1a40: 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a     exit(1);.  }.
1a50: 20 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f    return 0;.}../
1a60: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20  *.** Return the 
1a70: 6e 75 6d 62 65 72 20 6f 66 20 22 76 22 20 63 68  number of "v" ch
1a80: 61 72 61 63 74 65 72 73 20 69 6e 20 61 20 73 74  aracters in a st
1a90: 72 69 6e 67 2e 20 20 52 65 74 75 72 6e 20 30 20  ring.  Return 0 
1aa0: 69 66 20 74 68 65 72 65 0a 2a 2a 20 61 72 65 20  if there.** are 
1ab0: 61 6e 79 20 63 68 61 72 61 63 74 65 72 73 20 69  any characters i
1ac0: 6e 20 74 68 65 20 73 74 72 69 6e 67 20 6f 74 68  n the string oth
1ad0: 65 72 20 74 68 61 6e 20 22 76 22 2e 0a 2a 2f 0a  er than "v"..*/.
1ae0: 73 74 61 74 69 63 20 69 6e 74 20 6e 75 6d 62 65  static int numbe
1af0: 72 4f 66 56 43 68 61 72 28 63 6f 6e 73 74 20 63  rOfVChar(const c
1b00: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 4e  har *z){.  int N
1b10: 20 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 7a   = 0;.  while( z
1b20: 5b 30 5d 20 26 26 20 7a 5b 30 5d 3d 3d 27 76 27  [0] && z[0]=='v'
1b30: 20 29 7b 0a 20 20 20 20 7a 2b 2b 3b 0a 20 20 20   ){.    z++;.   
1b40: 20 4e 2b 2b 3b 0a 20 20 7d 0a 20 20 72 65 74 75   N++;.  }.  retu
1b50: 72 6e 20 7a 5b 30 5d 3d 3d 30 20 3f 20 4e 20 3a  rn z[0]==0 ? N :
1b60: 20 30 3b 0a 7d 0a 0a 2f 2a 20 6c 69 62 46 75 7a   0;.}../* libFuz
1b70: 7a 65 72 20 69 6e 76 6f 6b 65 73 20 74 68 69 73  zer invokes this
1b80: 20 72 6f 75 74 69 6e 65 20 6f 6e 63 65 20 77 68   routine once wh
1b90: 65 6e 20 74 68 65 20 65 78 65 63 75 74 61 62 6c  en the executabl
1ba0: 65 20 73 74 61 72 74 73 2c 20 74 6f 0a 2a 2a 20  e starts, to.** 
1bb0: 70 72 6f 63 65 73 73 20 74 68 65 20 63 6f 6d 6d  process the comm
1bc0: 61 6e 64 2d 6c 69 6e 65 20 61 72 67 75 6d 65 6e  and-line argumen
1bd0: 74 73 2e 0a 2a 2f 0a 69 6e 74 20 4c 4c 56 4d 46  ts..*/.int LLVMF
1be0: 75 7a 7a 65 72 49 6e 69 74 69 61 6c 69 7a 65 28  uzzerInitialize(
1bf0: 69 6e 74 20 2a 70 41 72 67 63 2c 20 63 68 61 72  int *pArgc, char
1c00: 20 2a 2a 2a 70 41 72 67 76 29 7b 0a 20 20 69 6e   ***pArgv){.  in
1c10: 74 20 69 2c 20 6a 2c 20 6e 3b 0a 20 20 69 6e 74  t i, j, n;.  int
1c20: 20 61 72 67 63 20 3d 20 2a 70 41 72 67 63 3b 0a   argc = *pArgc;.
1c30: 20 20 63 68 61 72 20 2a 2a 61 72 67 76 20 3d 20    char **argv = 
1c40: 2a 70 41 72 67 76 3b 0a 20 20 66 6f 72 28 69 3d  *pArgv;.  for(i=
1c50: 6a 3d 31 3b 20 69 3c 61 72 67 63 3b 20 69 2b 2b  j=1; i<argc; i++
1c60: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 20 3d  ){.    char *z =
1c70: 20 61 72 67 76 5b 69 5d 3b 0a 20 20 20 20 69 66   argv[i];.    if
1c80: 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 7b 0a 20  ( z[0]=='-' ){. 
1c90: 20 20 20 20 20 7a 2b 2b 3b 0a 20 20 20 20 20 20       z++;.      
1ca0: 69 66 28 20 7a 5b 30 5d 3d 3d 27 2d 27 20 29 20  if( z[0]=='-' ) 
1cb0: 7a 2b 2b 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  z++;.      if( z
1cc0: 5b 30 5d 3d 3d 27 76 27 20 26 26 20 28 6e 20 3d  [0]=='v' && (n =
1cd0: 20 6e 75 6d 62 65 72 4f 66 56 43 68 61 72 28 7a   numberOfVChar(z
1ce0: 29 29 3e 30 20 29 7b 0a 20 20 20 20 20 20 20 20  ))>0 ){.        
1cf0: 65 56 65 72 62 6f 73 69 74 79 20 2b 3d 20 6e 3b  eVerbosity += n;
1d00: 0a 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75  .        continu
1d10: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  e;.      }.     
1d20: 20 69 66 28 20 73 74 72 63 6d 70 28 7a 2c 22 76   if( strcmp(z,"v
1d30: 64 62 65 2d 64 65 62 75 67 22 29 3d 3d 30 20 29  dbe-debug")==0 )
1d40: 7b 0a 20 20 20 20 20 20 20 20 62 56 64 62 65 44  {.        bVdbeD
1d50: 65 62 75 67 20 3d 20 31 3b 0a 20 20 20 20 20 20  ebug = 1;.      
1d60: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
1d70: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 73 74    }.      if( st
1d80: 72 63 6d 70 28 7a 2c 22 6c 69 6d 69 74 22 29 3d  rcmp(z,"limit")=
1d90: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66  =0 ){.        if
1da0: 28 20 69 2b 31 3d 3d 61 72 67 63 20 29 7b 0a 20  ( i+1==argc ){. 
1db0: 20 20 20 20 20 20 20 20 20 66 70 72 69 6e 74 66           fprintf
1dc0: 28 73 74 64 65 72 72 2c 20 22 6d 69 73 73 69 6e  (stderr, "missin
1dd0: 67 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 25 73  g argument to %s
1de0: 5c 6e 22 2c 20 61 72 67 76 5b 69 5d 29 3b 0a 20  \n", argv[i]);. 
1df0: 20 20 20 20 20 20 20 20 20 65 78 69 74 28 31 29           exit(1)
1e00: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
1e10: 20 20 20 20 6d 78 43 62 20 3d 20 73 74 72 74 6f      mxCb = strto
1e20: 6c 28 61 72 67 76 5b 2b 2b 69 5d 2c 20 30 2c 20  l(argv[++i], 0, 
1e30: 30 29 3b 0a 20 20 20 20 20 20 20 20 63 6f 6e 74  0);.        cont
1e40: 69 6e 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  inue;.      }.  
1e50: 20 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 7a      if( strcmp(z
1e60: 2c 22 6d 65 6d 74 72 61 63 65 22 29 3d 3d 30 20  ,"memtrace")==0 
1e70: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
1e80: 65 33 4d 65 6d 54 72 61 63 65 41 63 74 69 76 61  e3MemTraceActiva
1e90: 74 65 28 73 74 64 6f 75 74 29 3b 0a 20 20 20 20  te(stdout);.    
1ea0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
1eb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
1ec0: 73 74 72 63 6d 70 28 7a 2c 22 6d 65 6d 22 29 3d  strcmp(z,"mem")=
1ed0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 62 56  =0 ){.        bV
1ee0: 64 62 65 44 65 62 75 67 20 3d 20 31 3b 0a 20 20  dbeDebug = 1;.  
1ef0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a        continue;.
1f00: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
1f10: 28 20 73 74 72 63 6d 70 28 7a 2c 22 6d 61 78 2d  ( strcmp(z,"max-
1f20: 64 62 2d 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a  db-size")==0 ){.
1f30: 20 20 20 20 20 20 20 20 69 66 28 20 69 2b 31 3d          if( i+1=
1f40: 3d 61 72 67 63 20 29 7b 0a 20 20 20 20 20 20 20  =argc ){.       
1f50: 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72     fprintf(stder
1f60: 72 2c 20 22 6d 69 73 73 69 6e 67 20 61 72 67 75  r, "missing argu
1f70: 6d 65 6e 74 20 74 6f 20 25 73 5c 6e 22 2c 20 61  ment to %s\n", a
1f80: 72 67 76 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20  rgv[i]);.       
1f90: 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20 20 20     exit(1);.    
1fa0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 7a      }.        sz
1fb0: 4d 61 78 20 3d 20 73 74 72 74 6f 6c 28 61 72 67  Max = strtol(arg
1fc0: 76 5b 2b 2b 69 5d 2c 20 30 2c 20 30 29 3b 0a 20  v[++i], 0, 0);. 
1fd0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1fe0: 0a 20 20 20 20 20 20 7d 0a 23 69 66 6e 64 65 66  .      }.#ifndef
1ff0: 20 5f 57 49 4e 33 32 0a 20 20 20 20 20 20 69 66   _WIN32.      if
2000: 28 20 73 74 72 63 6d 70 28 7a 2c 22 6d 61 78 2d  ( strcmp(z,"max-
2010: 73 74 61 63 6b 22 29 3d 3d 30 0a 20 20 20 20 20  stack")==0.     
2020: 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c 22 6d    || strcmp(z,"m
2030: 61 78 2d 64 61 74 61 22 29 3d 3d 30 0a 20 20 20  ax-data")==0.   
2040: 20 20 20 20 7c 7c 20 73 74 72 63 6d 70 28 7a 2c      || strcmp(z,
2050: 22 6d 61 78 2d 61 73 22 29 3d 3d 30 0a 20 20 20  "max-as")==0.   
2060: 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 73 74     ){.        st
2070: 72 75 63 74 20 72 6c 69 6d 69 74 20 78 2c 79 3b  ruct rlimit x,y;
2080: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
2090: 6f 75 72 63 65 20 3d 20 52 4c 49 4d 49 54 5f 53  ource = RLIMIT_S
20a0: 54 41 43 4b 3b 0a 20 20 20 20 20 20 20 20 63 68  TACK;.        ch
20b0: 61 72 20 2a 7a 54 79 70 65 20 3d 20 22 52 4c 49  ar *zType = "RLI
20c0: 4d 49 54 5f 53 54 41 43 4b 22 3b 0a 20 20 20 20  MIT_STACK";.    
20d0: 20 20 20 20 69 66 28 20 69 2b 31 3d 3d 61 72 67      if( i+1==arg
20e0: 63 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 66  c ){.          f
20f0: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
2100: 6d 69 73 73 69 6e 67 20 61 72 67 75 6d 65 6e 74  missing argument
2110: 20 74 6f 20 25 73 5c 6e 22 2c 20 61 72 67 76 5b   to %s\n", argv[
2120: 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 65  i]);.          e
2130: 78 69 74 28 31 29 3b 0a 20 20 20 20 20 20 20 20  xit(1);.        
2140: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 5b  }.        if( z[
2150: 34 5d 3d 3d 27 64 27 20 29 7b 0a 20 20 20 20 20  4]=='d' ){.     
2160: 20 20 20 20 20 72 65 73 6f 75 72 63 65 20 3d 20       resource = 
2170: 52 4c 49 4d 49 54 5f 44 41 54 41 3b 0a 20 20 20  RLIMIT_DATA;.   
2180: 20 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 22         zType = "
2190: 52 4c 49 4d 49 54 5f 44 41 54 41 22 3b 0a 20 20  RLIMIT_DATA";.  
21a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
21b0: 69 66 28 20 7a 5b 34 5d 3d 3d 27 61 27 20 29 7b  if( z[4]=='a' ){
21c0: 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 6f 75  .          resou
21d0: 72 63 65 20 3d 20 52 4c 49 4d 49 54 5f 41 53 3b  rce = RLIMIT_AS;
21e0: 0a 20 20 20 20 20 20 20 20 20 20 7a 54 79 70 65  .          zType
21f0: 20 3d 20 22 52 4c 49 4d 49 54 5f 41 53 22 3b 0a   = "RLIMIT_AS";.
2200: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
2210: 20 20 6d 65 6d 73 65 74 28 26 78 2c 30 2c 73 69    memset(&x,0,si
2220: 7a 65 6f 66 28 78 29 29 3b 0a 20 20 20 20 20 20  zeof(x));.      
2230: 20 20 67 65 74 72 6c 69 6d 69 74 28 72 65 73 6f    getrlimit(reso
2240: 75 72 63 65 2c 20 26 78 29 3b 0a 20 20 20 20 20  urce, &x);.     
2250: 20 20 20 79 2e 72 6c 69 6d 5f 63 75 72 20 3d 20     y.rlim_cur = 
2260: 61 74 6f 69 28 61 72 67 76 5b 2b 2b 69 5d 29 3b  atoi(argv[++i]);
2270: 0a 20 20 20 20 20 20 20 20 79 2e 72 6c 69 6d 5f  .        y.rlim_
2280: 6d 61 78 20 3d 20 78 2e 72 6c 69 6d 5f 63 75 72  max = x.rlim_cur
2290: 3b 0a 20 20 20 20 20 20 20 20 73 65 74 72 6c 69  ;.        setrli
22a0: 6d 69 74 28 72 65 73 6f 75 72 63 65 2c 20 26 79  mit(resource, &y
22b0: 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65  );.        memse
22c0: 74 28 26 79 2c 30 2c 73 69 7a 65 6f 66 28 79 29  t(&y,0,sizeof(y)
22d0: 29 3b 0a 20 20 20 20 20 20 20 20 67 65 74 72 6c  );.        getrl
22e0: 69 6d 69 74 28 72 65 73 6f 75 72 63 65 2c 20 26  imit(resource, &
22f0: 79 29 3b 0a 20 20 20 20 20 20 20 20 70 72 69 6e  y);.        prin
2300: 74 66 28 22 25 73 20 63 68 61 6e 67 65 64 20 66  tf("%s changed f
2310: 72 6f 6d 20 25 64 20 74 6f 20 25 64 5c 6e 22 2c  rom %d to %d\n",
2320: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
2330: 20 7a 54 79 70 65 2c 20 28 69 6e 74 29 78 2e 72   zType, (int)x.r
2340: 6c 69 6d 5f 63 75 72 2c 20 28 69 6e 74 29 79 2e  lim_cur, (int)y.
2350: 72 6c 69 6d 5f 63 75 72 29 3b 0a 20 20 20 20 20  rlim_cur);.     
2360: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
2370: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 5f     }.#endif /* _
2380: 57 49 4e 33 32 20 2a 2f 0a 20 20 20 20 7d 0a 20  WIN32 */.    }. 
2390: 20 20 20 61 72 67 76 5b 6a 2b 2b 5d 20 3d 20 61     argv[j++] = a
23a0: 72 67 76 5b 69 5d 3b 0a 20 20 7d 0a 20 20 61 72  rgv[i];.  }.  ar
23b0: 67 76 5b 6a 5d 20 3d 20 30 3b 0a 20 20 2a 70 41  gv[j] = 0;.  *pA
23c0: 72 67 63 20 3d 20 6a 3b 0a 20 20 72 65 74 75 72  rgc = j;.  retur
23d0: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
23e0: 54 41 4e 44 41 4c 4f 4e 45 0a 2f 2a 0a 2a 2a 20  TANDALONE./*.** 
23f0: 52 65 61 64 20 61 6e 20 65 6e 74 69 72 65 20 66  Read an entire f
2400: 69 6c 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 2e  ile into memory.
2410: 20 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20    Space to hold 
2420: 74 68 65 20 66 69 6c 65 20 63 6f 6d 65 73 0a 2a  the file comes.*
2430: 2a 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 2e  * from malloc().
2440: 0a 2a 2f 0a 73 74 61 74 69 63 20 75 6e 73 69 67  .*/.static unsig
2450: 6e 65 64 20 63 68 61 72 20 2a 72 65 61 64 46 69  ned char *readFi
2460: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  le(const char *z
2470: 4e 61 6d 65 2c 20 69 6e 74 20 2a 70 6e 42 79 74  Name, int *pnByt
2480: 65 29 7b 0a 20 20 46 49 4c 45 20 2a 69 6e 20 3d  e){.  FILE *in =
2490: 20 66 6f 70 65 6e 28 7a 4e 61 6d 65 2c 20 22 72   fopen(zName, "r
24a0: 62 22 29 3b 0a 20 20 6c 6f 6e 67 20 6e 49 6e 3b  b");.  long nIn;
24b0: 0a 20 20 73 69 7a 65 5f 74 20 6e 52 65 61 64 3b  .  size_t nRead;
24c0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  .  unsigned char
24d0: 20 2a 70 42 75 66 3b 0a 20 20 69 66 28 20 69 6e   *pBuf;.  if( in
24e0: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a  ==0 ) return 0;.
24f0: 20 20 66 73 65 65 6b 28 69 6e 2c 20 30 2c 20 53    fseek(in, 0, S
2500: 45 45 4b 5f 45 4e 44 29 3b 0a 20 20 6e 49 6e 20  EEK_END);.  nIn 
2510: 3d 20 66 74 65 6c 6c 28 69 6e 29 3b 0a 20 20 72  = ftell(in);.  r
2520: 65 77 69 6e 64 28 69 6e 29 3b 0a 20 20 70 42 75  ewind(in);.  pBu
2530: 66 20 3d 20 6d 61 6c 6c 6f 63 28 20 6e 49 6e 2b  f = malloc( nIn+
2540: 31 20 29 3b 0a 20 20 69 66 28 20 70 42 75 66 3d  1 );.  if( pBuf=
2550: 3d 30 20 29 7b 20 66 63 6c 6f 73 65 28 69 6e 29  =0 ){ fclose(in)
2560: 3b 20 72 65 74 75 72 6e 20 30 3b 20 7d 0a 20 20  ; return 0; }.  
2570: 6e 52 65 61 64 20 3d 20 66 72 65 61 64 28 70 42  nRead = fread(pB
2580: 75 66 2c 20 6e 49 6e 2c 20 31 2c 20 69 6e 29 3b  uf, nIn, 1, in);
2590: 0a 20 20 66 63 6c 6f 73 65 28 69 6e 29 3b 0a 20  .  fclose(in);. 
25a0: 20 69 66 28 20 6e 52 65 61 64 21 3d 31 20 29 7b   if( nRead!=1 ){
25b0: 0a 20 20 20 20 66 72 65 65 28 70 42 75 66 29 3b  .    free(pBuf);
25c0: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
25d0: 20 7d 0a 20 20 70 42 75 66 5b 6e 49 6e 5d 20 3d   }.  pBuf[nIn] =
25e0: 20 30 3b 0a 20 20 69 66 28 20 70 6e 42 79 74 65   0;.  if( pnByte
25f0: 20 29 20 2a 70 6e 42 79 74 65 20 3d 20 6e 49 6e   ) *pnByte = nIn
2600: 3b 0a 20 20 72 65 74 75 72 6e 20 70 42 75 66 3b  ;.  return pBuf;
2610: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 54 41  .}.#endif /* STA
2620: 4e 44 41 4c 4f 4e 45 20 2a 2f 0a 0a 23 69 66 64  NDALONE */..#ifd
2630: 65 66 20 53 54 41 4e 44 41 4c 4f 4e 45 0a 69 6e  ef STANDALONE.in
2640: 74 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c  t main(int argc,
2650: 20 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 20   char **argv){. 
2660: 20 69 6e 74 20 69 3b 0a 20 20 4c 4c 56 4d 46 75   int i;.  LLVMFu
2670: 7a 7a 65 72 49 6e 69 74 69 61 6c 69 7a 65 28 26  zzerInitialize(&
2680: 61 72 67 63 2c 20 26 61 72 67 76 29 3b 0a 20 20  argc, &argv);.  
2690: 66 6f 72 28 69 3d 31 3b 20 69 3c 61 72 67 63 3b  for(i=1; i<argc;
26a0: 20 69 2b 2b 29 7b 0a 20 20 20 20 75 6e 73 69 67   i++){.    unsig
26b0: 6e 65 64 20 63 68 61 72 20 2a 70 49 6e 3b 0a 20  ned char *pIn;. 
26c0: 20 20 20 69 6e 74 20 6e 49 6e 3b 0a 20 20 20 20     int nIn;.    
26d0: 70 49 6e 20 3d 20 72 65 61 64 46 69 6c 65 28 61  pIn = readFile(a
26e0: 72 67 76 5b 69 5d 2c 20 26 6e 49 6e 29 3b 0a 20  rgv[i], &nIn);. 
26f0: 20 20 20 69 66 28 20 70 49 6e 20 29 7b 0a 20 20     if( pIn ){.  
2700: 20 20 20 20 4c 4c 56 4d 46 75 7a 7a 65 72 54 65      LLVMFuzzerTe
2710: 73 74 4f 6e 65 49 6e 70 75 74 28 28 63 6f 6e 73  stOneInput((cons
2720: 74 20 75 69 6e 74 38 5f 74 2a 29 70 49 6e 2c 20  t uint8_t*)pIn, 
2730: 28 73 69 7a 65 5f 74 29 6e 49 6e 29 3b 0a 20 20  (size_t)nIn);.  
2740: 20 20 20 20 66 72 65 65 28 70 49 6e 29 3b 0a 20      free(pIn);. 
2750: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 65     }.  }.  if( e
2760: 56 65 72 62 6f 73 69 74 79 3e 30 20 29 7b 0a 20  Verbosity>0 ){. 
2770: 20 20 20 73 74 72 75 63 74 20 72 75 73 61 67 65     struct rusage
2780: 20 78 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   x;.    printf("
2790: 53 51 4c 69 74 65 20 25 73 5c 6e 22 2c 20 73 71  SQLite %s\n", sq
27a0: 6c 69 74 65 33 5f 73 6f 75 72 63 65 69 64 28 29  lite3_sourceid()
27b0: 29 3b 0a 20 20 20 20 6d 65 6d 73 65 74 28 26 78  );.    memset(&x
27c0: 2c 20 30 2c 20 73 69 7a 65 6f 66 28 78 29 29 3b  , 0, sizeof(x));
27d0: 0a 20 20 20 20 69 66 28 20 67 65 74 72 75 73 61  .    if( getrusa
27e0: 67 65 28 52 55 53 41 47 45 5f 53 45 4c 46 2c 20  ge(RUSAGE_SELF, 
27f0: 26 78 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  &x)==0 ){.      
2800: 70 72 69 6e 74 66 28 22 4d 61 78 69 6d 75 6d 20  printf("Maximum 
2810: 52 53 53 20 3d 20 25 6c 64 20 4b 42 5c 6e 22 2c  RSS = %ld KB\n",
2820: 20 78 2e 72 75 5f 6d 61 78 72 73 73 29 3b 0a 20   x.ru_maxrss);. 
2830: 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72     }.  }.  retur
2840: 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  n 0;.}.#endif /*
2850: 53 54 41 4e 44 41 4c 4f 4e 45 2a 2f 0a           STANDALONE*/.