mirror of
https://github.com/sqlite/sqlite.git
synced 2025-11-16 23:02:26 +03:00
In the CLI, omit the ".oom" command (only available in debug builds) and
disable the experimental ".expert" commmand in --safe mode. FossilOrigin-Name: 5cda1f7da885afdfda8683c59e78fec8da1a05c7a4fde573e89db5f872fcfb20
This commit is contained in:
12
manifest
12
manifest
@@ -1,5 +1,5 @@
|
|||||||
C New\sdefenses\sagainst\sOOM\sand\scorrupt\sdatabase\sproblems\sin\sthe\sCLI.
|
C In\sthe\sCLI,\somit\sthe\s".oom"\scommand\s(only\savailable\sin\sdebug\sbuilds)\sand\ndisable\sthe\sexperimental\s".expert"\scommmand\sin\s--safe\smode.
|
||||||
D 2021-12-16T17:35:27.612
|
D 2021-12-16T17:57:21.780
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -552,7 +552,7 @@ F src/random.c 097dc8b31b8fba5a9aca1697aeb9fd82078ec91be734c16bffda620ced7ab83c
|
|||||||
F src/resolve.c 4a1db4aadd802683db40ca2dbbb268187bd195f10cbdb7206dbd8ac988795571
|
F src/resolve.c 4a1db4aadd802683db40ca2dbbb268187bd195f10cbdb7206dbd8ac988795571
|
||||||
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
|
F src/rowset.c ba9515a922af32abe1f7d39406b9d35730ed65efab9443dc5702693b60854c92
|
||||||
F src/select.c a7a3d9f54eb24821ec5f67f2e5589b68a5d42d46fc5849d7376886777d93a85a
|
F src/select.c a7a3d9f54eb24821ec5f67f2e5589b68a5d42d46fc5849d7376886777d93a85a
|
||||||
F src/shell.c.in 3f53d10076f3d0a7f993a03edec15d0ddad236536f300578cadd536e1a5b2d8c
|
F src/shell.c.in 6d2c65052522d964dd09c937820e6b618ee6d6f12be524390dd82c2a57b9abfd
|
||||||
F src/sqlite.h.in 5999d6db0e65afbd686b76cddc385b310aa3815624edba43987913067f50e209
|
F src/sqlite.h.in 5999d6db0e65afbd686b76cddc385b310aa3815624edba43987913067f50e209
|
||||||
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
F src/sqlite3.rc 5121c9e10c3964d5755191c80dd1180c122fc3a8
|
||||||
F src/sqlite3ext.h 8ff2fd2c166150b2e48639f5e506fb44e29f1a3f65031710b9e89d1c126ac839
|
F src/sqlite3ext.h 8ff2fd2c166150b2e48639f5e506fb44e29f1a3f65031710b9e89d1c126ac839
|
||||||
@@ -1935,7 +1935,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 4d02a129c4781c97981748f3c69564e1320d8085dfba4c207e54793390cd64ab
|
P 5c9fd7fde16d8e335488b8bf5c691961d2636201b034d1f29d25de8708de291d
|
||||||
R d166a1375475e15d05923fef18bf064e
|
R 7feb81258c8f4748886f602fc3eeba00
|
||||||
U drh
|
U drh
|
||||||
Z 5bfe5520d7a9e1ead42448469dfb8bb8
|
Z 8a322aaf96dc4e6ca11de1635edd3a36
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
5c9fd7fde16d8e335488b8bf5c691961d2636201b034d1f29d25de8708de291d
|
5cda1f7da885afdfda8683c59e78fec8da1a05c7a4fde573e89db5f872fcfb20
|
||||||
101
src/shell.c.in
101
src/shell.c.in
@@ -427,15 +427,6 @@ static sqlite3 *globalDb = 0;
|
|||||||
*/
|
*/
|
||||||
static volatile int seenInterrupt = 0;
|
static volatile int seenInterrupt = 0;
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
/*
|
|
||||||
** Out-of-memory simulator variables
|
|
||||||
*/
|
|
||||||
static unsigned int oomCounter = 0; /* Simulate OOM when equals 1 */
|
|
||||||
static unsigned int oomRepeat = 0; /* Number of OOMs in a row */
|
|
||||||
static void*(*defaultMalloc)(int) = 0; /* The low-level malloc routine */
|
|
||||||
#endif /* SQLITE_DEBUG */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** This is the name of our program. It is set in main(), used
|
** This is the name of our program. It is set in main(), used
|
||||||
** in a number of other places, mostly for error messages.
|
** in a number of other places, mostly for error messages.
|
||||||
@@ -494,49 +485,6 @@ static void shell_check_oom(void *p){
|
|||||||
if( p==0 ) shell_out_of_memory();
|
if( p==0 ) shell_out_of_memory();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
/* This routine is called when a simulated OOM occurs. It is broken
|
|
||||||
** out as a separate routine to make it easy to set a breakpoint on
|
|
||||||
** the OOM
|
|
||||||
*/
|
|
||||||
void shellOomFault(void){
|
|
||||||
if( oomRepeat>0 ){
|
|
||||||
oomRepeat--;
|
|
||||||
}else{
|
|
||||||
oomCounter--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* SQLITE_DEBUG */
|
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
/* This routine is a replacement malloc() that is used to simulate
|
|
||||||
** Out-Of-Memory (OOM) errors for testing purposes.
|
|
||||||
*/
|
|
||||||
static void *oomMalloc(int nByte){
|
|
||||||
if( oomCounter ){
|
|
||||||
if( oomCounter==1 ){
|
|
||||||
shellOomFault();
|
|
||||||
return 0;
|
|
||||||
}else{
|
|
||||||
oomCounter--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return defaultMalloc(nByte);
|
|
||||||
}
|
|
||||||
#endif /* SQLITE_DEBUG */
|
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
/* Register the OOM simulator. This must occur before any memory
|
|
||||||
** allocations */
|
|
||||||
static void registerOomSimulator(void){
|
|
||||||
sqlite3_mem_methods mem;
|
|
||||||
sqlite3_config(SQLITE_CONFIG_GETMALLOC, &mem);
|
|
||||||
defaultMalloc = mem.xMalloc;
|
|
||||||
mem.xMalloc = oomMalloc;
|
|
||||||
sqlite3_config(SQLITE_CONFIG_MALLOC, &mem);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Write I/O traces to the following stream.
|
** Write I/O traces to the following stream.
|
||||||
*/
|
*/
|
||||||
@@ -4117,9 +4065,6 @@ static const char *(azHelp[]) = {
|
|||||||
" --bom Put a UTF8 byte-order mark at the beginning",
|
" --bom Put a UTF8 byte-order mark at the beginning",
|
||||||
" -e Send output to the system text editor",
|
" -e Send output to the system text editor",
|
||||||
" -x Send output as CSV to a spreadsheet (same as \".excel\")",
|
" -x Send output as CSV to a spreadsheet (same as \".excel\")",
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
".oom ?--repeat M? ?N? Simulate an OOM error on the N-th allocation",
|
|
||||||
#endif
|
|
||||||
".open ?OPTIONS? ?FILE? Close existing database and reopen FILE",
|
".open ?OPTIONS? ?FILE? Close existing database and reopen FILE",
|
||||||
" Options:",
|
" Options:",
|
||||||
" --append Use appendvfs to append database to the end of FILE",
|
" --append Use appendvfs to append database to the end of FILE",
|
||||||
@@ -8154,8 +8099,15 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
|
|
||||||
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
#ifndef SQLITE_OMIT_VIRTUALTABLE
|
||||||
if( c=='e' && strncmp(azArg[0], "expert", n)==0 ){
|
if( c=='e' && strncmp(azArg[0], "expert", n)==0 ){
|
||||||
open_db(p, 0);
|
if( p->bSafeMode ){
|
||||||
expertDotCommand(p, azArg, nArg);
|
raw_printf(stderr,
|
||||||
|
"Cannot run experimental commands such as \"%s\" in safe mode\n",
|
||||||
|
azArg[0]);
|
||||||
|
rc = 1;
|
||||||
|
}else{
|
||||||
|
open_db(p, 0);
|
||||||
|
expertDotCommand(p, azArg, nArg);
|
||||||
|
}
|
||||||
}else
|
}else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -8947,7 +8899,8 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
raw_printf(stderr, "Usage: .nonce NONCE\n");
|
raw_printf(stderr, "Usage: .nonce NONCE\n");
|
||||||
rc = 1;
|
rc = 1;
|
||||||
}else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){
|
}else if( p->zNonce==0 || strcmp(azArg[1],p->zNonce)!=0 ){
|
||||||
raw_printf(stderr, "line %d: incorrect nonce: \"%s\"\n", p->lineno, azArg[1]);
|
raw_printf(stderr, "line %d: incorrect nonce: \"%s\"\n",
|
||||||
|
p->lineno, azArg[1]);
|
||||||
exit(1);
|
exit(1);
|
||||||
}else{
|
}else{
|
||||||
p->bSafeMode = 0;
|
p->bSafeMode = 0;
|
||||||
@@ -8966,34 +8919,6 @@ static int do_meta_command(char *zLine, ShellState *p){
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
if( c=='o' && strcmp(azArg[0],"oom")==0 ){
|
|
||||||
int i;
|
|
||||||
for(i=1; i<nArg; i++){
|
|
||||||
const char *z = azArg[i];
|
|
||||||
if( z[0]=='-' && z[1]=='-' ) z++;
|
|
||||||
if( strcmp(z,"-repeat")==0 ){
|
|
||||||
if( i==nArg-1 ){
|
|
||||||
raw_printf(p->out, "missing argument on \"%s\"\n", azArg[i]);
|
|
||||||
rc = 1;
|
|
||||||
}else{
|
|
||||||
oomRepeat = (int)integerValue(azArg[++i]);
|
|
||||||
}
|
|
||||||
}else if( IsDigit(z[0]) ){
|
|
||||||
oomCounter = (int)integerValue(azArg[i]);
|
|
||||||
}else{
|
|
||||||
raw_printf(p->out, "unknown argument: \"%s\"\n", azArg[i]);
|
|
||||||
raw_printf(p->out, "Usage: .oom [--repeat N] [M]\n");
|
|
||||||
rc = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if( rc==0 ){
|
|
||||||
raw_printf(p->out, "oomCounter = %d\n", oomCounter);
|
|
||||||
raw_printf(p->out, "oomRepeat = %d\n", oomRepeat);
|
|
||||||
}
|
|
||||||
}else
|
|
||||||
#endif /* SQLITE_DEBUG */
|
|
||||||
|
|
||||||
if( c=='o' && strncmp(azArg[0], "open", n)==0 && n>=2 ){
|
if( c=='o' && strncmp(azArg[0], "open", n)==0 && n>=2 ){
|
||||||
const char *zFN = 0; /* Pointer to constant filename */
|
const char *zFN = 0; /* Pointer to constant filename */
|
||||||
char *zNewFilename = 0; /* Name of the database file to open */
|
char *zNewFilename = 0; /* Name of the database file to open */
|
||||||
@@ -11330,10 +11255,6 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){
|
|||||||
stdin_is_interactive = isatty(0);
|
stdin_is_interactive = isatty(0);
|
||||||
stdout_is_console = isatty(1);
|
stdout_is_console = isatty(1);
|
||||||
|
|
||||||
#ifdef SQLITE_DEBUG
|
|
||||||
registerOomSimulator();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(_WIN32_WCE)
|
#if !defined(_WIN32_WCE)
|
||||||
if( getenv("SQLITE_DEBUG_BREAK") ){
|
if( getenv("SQLITE_DEBUG_BREAK") ){
|
||||||
if( isatty(0) && isatty(2) ){
|
if( isatty(0) && isatty(2) ){
|
||||||
|
|||||||
Reference in New Issue
Block a user