On 14.1.2013 12:56, Petr Viktorin wrote:
On 01/09/2013 06:11 PM, Jan Cholasta wrote:
Hi,

this patch fixes <https://fedorahosted.org/freeipa/ticket/3323>.

Honza


The patch works well, but could you also add a test to ensure we don't
regress in the future?



Test added.

--
Jan Cholasta
>From a6cd1e4550a779146eac7fcb2d986e2a4903d9a6 Mon Sep 17 00:00:00 2001
From: Jan Cholasta <jchol...@redhat.com>
Date: Tue, 8 Jan 2013 16:32:41 +0100
Subject: [PATCH] Raise ValidationError on invalid CSV values.

https://fedorahosted.org/freeipa/ticket/3323
---
 ipalib/parameters.py                 | 13 ++++++++++---
 tests/test_ipalib/test_parameters.py |  4 ++++
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/ipalib/parameters.py b/ipalib/parameters.py
index 670e036..63fa2f6 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 b30ae5a..12270a9 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.
-- 
1.8.1

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to