csv_import: handle null bytes (#53323)

This commit is contained in:
Valentin Deniaud 2021-04-29 11:13:59 +02:00
parent 0afeb130ca
commit adf8bf659b
2 changed files with 16 additions and 2 deletions

View File

@ -172,8 +172,12 @@ class CsvImporter(object):
if not dialect:
self.error = Error('unknown-csv-dialect', _('Unknown CSV dialect'))
return False
reader = UnicodeReader(input_fd, dialect)
self.rows = list(reader)
try:
reader = UnicodeReader(input_fd, dialect)
self.rows = list(reader)
except (csv.Error, TypeError) as e:
self.error = Error('csv-read-error', _('Cannot read CSV: %s') % e)
return False
return True
with input_fd:

View File

@ -93,6 +93,16 @@ def test_bad_csv_encoding(profile):
assert importer.error == Error('bad-encoding')
def test_null_byte(profile):
importer = CsvImporter()
assert not importer.run(b'email key,first_name\n1,\x00', 'ascii')
assert importer.error == Error('csv-read-error')
importer = CsvImporter()
assert not importer.run(b'\x00', 'ascii')
assert importer.error == Error('csv-read-error')
def test_empty_header_row_error(profile, user_csv_importer_factory):
importer = user_csv_importer_factory('\n1,2,3')
assert not importer.run()