summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2013-01-08 16:32:41 +0100
committerMartin Kosek <mkosek@redhat.com>2013-02-08 15:16:37 +0100
commit1d35043e466dfca22cdaf463b6623c10a9ff2d39 (patch)
tree2b6e9a66c0e8b6db589d1a706e3de079566b9b1e
parentcbb262dc07ea0615068a630e6c7136e3200d5a06 (diff)
downloadfreeipa-1d35043e466dfca22cdaf463b6623c10a9ff2d39.tar.gz
freeipa-1d35043e466dfca22cdaf463b6623c10a9ff2d39.tar.xz
freeipa-1d35043e466dfca22cdaf463b6623c10a9ff2d39.zip
Raise ValidationError on invalid CSV values.
https://fedorahosted.org/freeipa/ticket/3323
-rw-r--r--ipalib/parameters.py13
-rw-r--r--tests/test_ipalib/test_parameters.py4
2 files changed, 14 insertions, 3 deletions
diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 502f173c9..2e26923dd 100644
--- a/ipalib/parameters.py
+++ b/ipalib/parameters.py
@@ -694,9 +694,16 @@ class Param(ReadOnly):
delimiter=self.csv_separator, quotechar='"',
skipinitialspace=self.csv_skipspace,
**kwargs)
- for row in csv_reader:
- # decode UTF-8 back to Unicode, cell by cell:
- yield [unicode(cell, 'utf-8') for cell in row]
+ try:
+ for row in csv_reader:
+ # decode UTF-8 back to Unicode, cell by cell:
+ yield [unicode(cell, 'utf-8') for cell in row]
+ except csv.Error, e:
+ raise ValidationError(
+ name=self.get_param_name(),
+ value=unicode_csv_data,
+ error=_("Improperly formatted CSV value (%s)" % e)
+ )
def split_csv(self, value):
"""Split CSV strings into individual values.
diff --git a/tests/test_ipalib/test_parameters.py b/tests/test_ipalib/test_parameters.py
index b30ae5ada..12270a94f 100644
--- a/tests/test_ipalib/test_parameters.py
+++ b/tests/test_ipalib/test_parameters.py
@@ -631,6 +631,10 @@ class test_Param(ClassChecker):
assert type(n) is tuple
assert len(n) is 3
+ e = raises(ValidationError, o.split_csv, '"a')
+ assert e.name == 'my_list'
+ assert e.error == u'Improperly formatted CSV value (newline inside string)'
+
def test_split_csv_separator(self):
"""
Test the `ipalib.parameters.Param.split_csv` method with csv and a separator.