aboutsummaryrefslogtreecommitdiff
path: root/ext/misc/csv.c
diff options
context:
space:
mode:
authordan <Dan Kennedy>2022-07-05 17:49:04 +0000
committerdan <Dan Kennedy>2022-07-05 17:49:04 +0000
commitc578e4f0eb6a99b52c710d21afbe722c746a821a (patch)
tree2a7cf8f616673eab539d802fcc07094519705ca5 /ext/misc/csv.c
parent48cae1320b49473787284ace2c543d1fd9332787 (diff)
downloadsqlite-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.c7
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 );