OpenCoverage

random.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/sqlite/src/src/random.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/*-
2** 2001 September 15-
3**-
4** The author disclaims copyright to this source code. In place of-
5** a legal notice, here is a blessing:-
6**-
7** May you do good and not evil.-
8** May you find forgiveness for yourself and forgive others.-
9** May you share freely, never taking more than you give.-
10**-
11*************************************************************************-
12** This file contains code to implement a pseudo-random number-
13** generator (PRNG) for SQLite.-
14**-
15** Random numbers are used by some of the database backends in order-
16** to generate random integer keys for tables or random filenames.-
17*/-
18#include "sqliteInt.h"-
19-
20-
21/* All threads share a single random number generator.-
22** This structure is the current state of the generator.-
23*/-
24static SQLITE_WSD struct sqlite3PrngType {-
25 unsigned char isInit; /* True if initialized */-
26 unsigned char i, j; /* State variables */-
27 unsigned char s[256]; /* State variables */-
28} sqlite3Prng;-
29-
30/*-
31** Return N random bytes.-
32*/-
33void sqlite3_randomness(int N, void *pBuf){-
34 unsigned char t;-
35 unsigned char *zBuf = pBuf;-
36-
37 /* The "wsdPrng" macro will resolve to the pseudo-random number generator-
38 ** state vector. If writable static data is unsupported on the target,-
39 ** we have to locate the state vector at run-time. In the more common-
40 ** case where writable static data is supported, wsdPrng can refer directly-
41 ** to the "sqlite3Prng" state vector declared above.-
42 */-
43#ifdef SQLITE_OMIT_WSD-
44 struct sqlite3PrngType *p = &GLOBAL(struct sqlite3PrngType, sqlite3Prng);-
45# define wsdPrng p[0]-
46#else-
47# define wsdPrng sqlite3Prng-
48#endif-
49-
50#if SQLITE_THREADSAFE-
51 sqlite3_mutex *mutex;-
52#endif-
53-
54#ifndef SQLITE_OMIT_AUTOINIT-
55 if( sqlite3_initialize() ) return;
never executed: return;
sqlite3_initialize()Description
TRUEnever evaluated
FALSEevaluated 2368905 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
0-2368905
56#endif-
57-
58#if SQLITE_THREADSAFE-
59 mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);-
60#endif-
61-
62 sqlite3_mutex_enter(mutex);-
63 if( N<=0 || pBuf==0 ){
N<=0Description
TRUEevaluated 1416 times by 438 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
FALSEevaluated 2367489 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
pBuf==0Description
TRUEnever evaluated
FALSEevaluated 2367489 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
0-2367489
64 wsdPrng.isInit = 0;-
65 sqlite3_mutex_leave(mutex);-
66 return;
executed 1416 times by 438 tests: return;
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (102)
  • Self test (103)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • ...
1416
67 }-
68-
69 /* Initialize the state of the random number generator once,-
70 ** the first time this routine is called. The seed value does-
71 ** not need to contain a lot of randomness since we are not-
72 ** trying to do secure encryption or anything like that...-
73 **-
74 ** Nothing in this file or anywhere else in SQLite does any kind of-
75 ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random-
76 ** number generator) not as an encryption device.-
77 */-
78 if( !wsdPrng.isInit ){
!sqlite3Prng.isInitDescription
TRUEevaluated 1074 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 2366415 times by 383 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • Self test (123)
  • ...
1074-2366415
79 int i;-
80 char k[256];-
81 wsdPrng.j = 0;-
82 wsdPrng.i = 0;-
83 sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k);-
84 for(i=0; i<256; i++){
i<256Description
TRUEevaluated 274944 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 1074 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
1074-274944
85 wsdPrng.s[i] = (u8)i;-
86 }
executed 274944 times by 396 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
274944
87 for(i=0; i<256; i++){
i<256Description
TRUEevaluated 274944 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 1074 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
1074-274944
88 wsdPrng.j += wsdPrng.s[i] + k[i];-
89 t = wsdPrng.s[wsdPrng.j];-
90 wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];-
91 wsdPrng.s[i] = t;-
92 }
executed 274944 times by 396 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
274944
93 wsdPrng.isInit = 1;-
94 }
executed 1074 times by 396 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
1074
95-
96 assert( N>0 );-
97 do{-
98 wsdPrng.i++;-
99 t = wsdPrng.s[wsdPrng.i];-
100 wsdPrng.j += t;-
101 wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];-
102 wsdPrng.s[wsdPrng.j] = t;-
103 t += wsdPrng.s[wsdPrng.i];-
104 *(zBuf++) = wsdPrng.s[t];-
105 }while( --N );
executed 288366033 times by 396 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
--NDescription
TRUEevaluated 285998544 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
FALSEevaluated 2367489 times by 396 tests
Evaluated by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
2367489-288366033
106 sqlite3_mutex_leave(mutex);-
107}
executed 2367489 times by 396 tests: end of block
Executed by:
  • Self test
  • Self test (10)
  • Self test (100)
  • Self test (101)
  • Self test (104)
  • Self test (105)
  • Self test (106)
  • Self test (107)
  • Self test (108)
  • Self test (109)
  • Self test (11)
  • Self test (110)
  • Self test (111)
  • Self test (112)
  • Self test (113)
  • Self test (114)
  • Self test (115)
  • Self test (116)
  • Self test (117)
  • Self test (118)
  • Self test (119)
  • Self test (12)
  • Self test (120)
  • Self test (121)
  • Self test (122)
  • ...
2367489
108-
109#ifndef SQLITE_UNTESTABLE-
110/*-
111** For testing purposes, we sometimes want to preserve the state of-
112** PRNG and restore the PRNG to its saved state at a later time, or-
113** to reset the PRNG to its initial state. These routines accomplish-
114** those tasks.-
115**-
116** The sqlite3_test_control() interface calls these routines to-
117** control the PRNG.-
118*/-
119static SQLITE_WSD struct sqlite3PrngType sqlite3SavedPrng;-
120void sqlite3PrngSaveState(void){-
121 memcpy(-
122 &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),-
123 &GLOBAL(struct sqlite3PrngType, sqlite3Prng),-
124 sizeof(sqlite3Prng)-
125 );-
126}
executed 5 times by 1 test: end of block
Executed by:
  • Self test (438)
5
127void sqlite3PrngRestoreState(void){-
128 memcpy(-
129 &GLOBAL(struct sqlite3PrngType, sqlite3Prng),-
130 &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),-
131 sizeof(sqlite3Prng)-
132 );-
133}
executed 927 times by 1 test: end of block
Executed by:
  • Self test (438)
927
134#endif /* SQLITE_UNTESTABLE */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.2