aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schmucker <ts@its1.de>2020-06-26 14:08:23 +0200
committerThomas Schmucker <ts@its1.de>2020-06-26 14:08:23 +0200
commit13a965954523b8ee0a9633e02697f909c3d31a0e (patch)
treeac97349a16029ac1924d708574cf437dc1fd84e5
parentcf60629baa28b65fe5b663c301003f7b96c40a7d (diff)
downloadlibcsv-13a965954523b8ee0a9633e02697f909c3d31a0e.tar.gz
libcsv-13a965954523b8ee0a9633e02697f909c3d31a0e.tar.bz2
libcsv-13a965954523b8ee0a9633e02697f909c3d31a0e.zip
Verhindere, dass eine manipulierte Eingabe unsere String-Darstellung im
Speicher kaputt macht. Hierfür werden Null-Bytes aus der Eingabe ausgefiltert und nicht abgespeichert.
-rw-r--r--csv.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/csv.c b/csv.c
index edc9c82..8e4dfa2 100644
--- a/csv.c
+++ b/csv.c
@@ -345,7 +345,9 @@ csv_read(csv_t *csv, FILE *in)
345 state = STATE_QUOTED_FIELD; 345 state = STATE_QUOTED_FIELD;
346 } 346 }
347 else { 347 else {
348 csv_string_append(&csv->csv_string, ch, csv->csv_options); 348 if ( ch != '\0' ) {
349 csv_string_append(&csv->csv_string, ch, csv->csv_options);
350 }
349 state = STATE_SIMPLE_FIELD; 351 state = STATE_SIMPLE_FIELD;
350 } 352 }
351 break; 353 break;
@@ -383,7 +385,9 @@ csv_read(csv_t *csv, FILE *in)
383 } 385 }
384 } 386 }
385 else { 387 else {
386 csv_string_append(&csv->csv_string, ch, csv->csv_options); 388 if ( ch != '\0' ) {
389 csv_string_append(&csv->csv_string, ch, csv->csv_options);
390 }
387 } 391 }
388 } while ( state == STATE_QUOTED_FIELD ); 392 } while ( state == STATE_QUOTED_FIELD );
389 break; 393 break;
@@ -408,7 +412,9 @@ csv_read(csv_t *csv, FILE *in)
408 state = STATE_END_LINE; 412 state = STATE_END_LINE;
409 } 413 }
410 else { 414 else {
411 csv_string_append(&csv->csv_string, ch, csv->csv_options); 415 if ( ch != '\0' ) {
416 csv_string_append(&csv->csv_string, ch, csv->csv_options);
417 }
412 } 418 }
413 } while ( state == STATE_SIMPLE_FIELD ); 419 } while ( state == STATE_SIMPLE_FIELD );
414 break; 420 break;