}
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;
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 );
-C Fix\san\sassert()\sin\sbtree\sto\sbe\smore\sprecise,\sas\sthe\sprevious\sform\sof\sthat\nasser\smight\sfail\sdue\sto\srecent\sperformance\soptimizations.
-D 2022-07-05T10:40:30.126
+C Fix\sa\sproblem\sin\sthe\scsv\sextension\sthat\swas\striggered\swhen\sthe\svery\sfirst\sfield\sin\sthe\scsv\sfile\sis\szero\sbytes\sin\ssize.
+D 2022-07-05T17:49:04.076
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
F ext/misc/closure.c dbfd8543b2a017ae6b1a5843986b22ddf99ff126ec9634a2f4047cd14c85c243
F ext/misc/completion.c 6dafd7f4348eecc7be9e920d4b419d1fb2af75d938cd9c59a20cfe8beb2f22b9
F ext/misc/compress.c 3354c77a7c8e86e07d849916000cdac451ed96500bfb5bd83b20eb61eee012c9
-F ext/misc/csv.c d14709096280dc0e20c533f184568952bf4b8022ea80afc4aa9fec5ab3637bb3
+F ext/misc/csv.c ed30e56908a42499e3f167bbc0a2366a2226d020e2f6ef84d0cf8c191686ebd6
F ext/misc/dbdata.c e316fba936571584e55abd5b974a32a191727a6b746053a0c9d439bd2cf93940
F ext/misc/dbdump.c b8592f6f2da292c62991a13864a60d6c573c47a9cc58362131b9e6a64f823e01
F ext/misc/decimal.c 09f967dcf4a1ee35a76309829308ec278d3648168733f4a1147820e11ebefd12
F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
F test/createtab.test 85cdfdae5c3de331cd888d6c66e1aba575b47c2e3c3cc4a1d6f54140699f5165
F test/cse.test 00b3aea44b16828833c94fbe92475fd6977583fcb064ae0bc590986812b38d0c
-F test/csv01.test c9c3af0d58c34e9ac970c5875a77939edb958762c8aafb95409e19a3f088b6cd
+F test/csv01.test f3c76474e8e4aed7a0008065e4da4ab9fb7967712eb2037c13b478def0227c72
F test/ctime.test 340f362f41f92972bbd71f44e10569a5cc694062b692231bd08aa6fe6c1c4773
F test/cursorhint.test 0175e4404181ace3ceca8b114eb0a98eae600d565aa4e2705abbe6614c7fe201
F test/cursorhint2.test 6f3aa9cb19e7418967a10ec6905209bcbb5968054da855fc36c8beee9ae9c42f
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 1a8c2e54375ee2cf73773b798fed0ae07b42f5e068fddc513c093de5c1f46615
-R 2757a3df013fcba9ceda084162d54bbf
-U drh
-Z 1c5dbf09a49cb9834da7c27397ce6fb7
+P 4774938134d0105423720bdc1b4e82164a1e28d993c5cd81c1b03f1f0878427e
+R dfc0f75d3f385da37032208862505139
+U dan
+Z c4ecb4b4b9fc154ab5d210ccd69309f6
# Remove this line to create a well-formed Fossil manifest.
SELECT *, '|' FROM t5_1;
} {1 2 3 4 | one two three four | 5 6 7 8 |}
+#-------------------------------------------------------------------------
+
+proc randomtext {n} {
+ string range [db one {SELECT hex(randomblob($n))}] 1 $n
+}
+
+for {set ii 0} {$ii < 200} {incr ii} {
+ reset_db
+ load_static_extension db csv
+ set fd [open csv.data w]
+ puts $fd "a,b"
+ puts $fd "[randomtext $ii],abcd"
+ close $fd
+ do_execsql_test 6.$ii.1 {
+ CREATE VIRTUAL TABLE abc USING csv(filename='csv.data', header=true);
+ }
+
+ do_execsql_test 6.$ii.2 {
+ SELECT count(*) FROM abc
+ } 1
+}
+
finish_test