diff options
author | larrybr <larrybr@noemail.net> | 2023-03-06 21:38:38 +0000 |
---|---|---|
committer | larrybr <larrybr@noemail.net> | 2023-03-06 21:38:38 +0000 |
commit | 51a31a3b9cdb4cab6f9c57764f3f216f06f2911f (patch) | |
tree | dec7b836a6b026d42ebfc96508828fe52318134e /src | |
parent | f30da226e3461eb11e67795ad7a28fa8f5a371a3 (diff) | |
download | sqlite-51a31a3b9cdb4cab6f9c57764f3f216f06f2911f.tar.gz sqlite-51a31a3b9cdb4cab6f9c57764f3f216f06f2911f.zip |
Cause CLI to fail noisily when deserialize option used for non-seekable "file".
FossilOrigin-Name: 24bd7e82471925987d924188ce0f80ed4f282b10ea1022e42881a7f529814eb9
Diffstat (limited to 'src')
-rw-r--r-- | src/shell.c.in | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/shell.c.in b/src/shell.c.in index b76e44f45..6b9e2b354 100644 --- a/src/shell.c.in +++ b/src/shell.c.in @@ -4894,16 +4894,27 @@ static char *readFile(const char *zName, int *pnByte){ long nIn; size_t nRead; char *pBuf; + int rc; if( in==0 ) return 0; - fseek(in, 0, SEEK_END); + rc = fseek(in, 0, SEEK_END); + if( rc!=0 ){ + raw_printf(stderr, "Error: '%s' not seekable\n", zName); + fclose(in); + return 0; + } nIn = ftell(in); rewind(in); pBuf = sqlite3_malloc64( nIn+1 ); - if( pBuf==0 ){ fclose(in); return 0; } + if( pBuf==0 ){ + raw_printf(stderr, "Error: out of memory\n"); + fclose(in); + return 0; + } nRead = fread(pBuf, nIn, 1, in); fclose(in); if( nRead!=1 ){ sqlite3_free(pBuf); + raw_printf(stderr, "Error: cannot read '%s'\n", zName); return 0; } pBuf[nIn] = 0; @@ -5398,9 +5409,9 @@ static void open_db(ShellState *p, int openFlags){ aData = (unsigned char*)readFile(zDbFilename, &nData); }else{ aData = readHexDb(p, &nData); - if( aData==0 ){ - return; - } + } + if( aData==0 ){ + return; } rc = sqlite3_deserialize(p->db, "main", aData, nData, nData, SQLITE_DESERIALIZE_RESIZEABLE | @@ -8039,7 +8050,6 @@ static int do_meta_command(char *zLine, ShellState *p){ raw_printf(stderr, "Usage: .check GLOB-PATTERN\n"); rc = 2; }else if( (zRes = readFile("testcase-out.txt", 0))==0 ){ - raw_printf(stderr, "Error: cannot read 'testcase-out.txt'\n"); rc = 2; }else if( testcase_glob(azArg[1],zRes)==0 ){ utf8_printf(stderr, |