diff options
author | dan <Dan Kennedy> | 2022-07-05 17:49:04 +0000 |
---|---|---|
committer | dan <Dan Kennedy> | 2022-07-05 17:49:04 +0000 |
commit | c578e4f0eb6a99b52c710d21afbe722c746a821a (patch) | |
tree | 2a7cf8f616673eab539d802fcc07094519705ca5 /ext/misc/csv.c | |
parent | 48cae1320b49473787284ace2c543d1fd9332787 (diff) | |
download | sqlite-c578e4f0eb6a99b52c710d21afbe722c746a821a.tar.gz sqlite-c578e4f0eb6a99b52c710d21afbe722c746a821a.zip |
Fix a problem in the csv extension that was triggered when the very first field in the csv file is zero bytes in size.
FossilOrigin-Name: b12ddabf07b5e06bcee8dda3f990af3a131ab52b8fa969ba061b26d38458f31d
Diffstat (limited to 'ext/misc/csv.c')
-rw-r--r-- | ext/misc/csv.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/ext/misc/csv.c b/ext/misc/csv.c index b51fbad30..915c1cef8 100644 --- a/ext/misc/csv.c +++ b/ext/misc/csv.c @@ -280,6 +280,7 @@ static char *csv_read_one_field(CsvReader *p){ } p->cTerm = (char)c; } + assert( p->z==0 || p->n<p->nAlloc ); if( p->z ) p->z[p->n] = 0; p->bNotFirst = 1; return p->z; @@ -811,6 +812,12 @@ static int csvtabFilter( CsvCursor *pCur = (CsvCursor*)pVtabCursor; CsvTable *pTab = (CsvTable*)pVtabCursor->pVtab; pCur->iRowid = 0; + + /* Ensure the field buffer is always allocated. Otherwise, if the + ** first field is zero bytes in size, this may be mistaken for an OOM + ** error in csvtabNext(). */ + if( csv_append(&pCur->rdr, 0) ) return SQLITE_NOMEM; + if( pCur->rdr.in==0 ){ assert( pCur->rdr.zIn==pTab->zData ); assert( pTab->iStart>=0 ); |