[Python-checkins] cpython (3.2): Issue #16013: Fix CSV Reader parsing issue with ending quote characters. Patch
senthil.kumaran
python-checkins at python.org
Tue Sep 25 11:37:30 CEST 2012
http://hg.python.org/cpython/rev/e9c005676d6e
changeset: 79156:e9c005676d6e
branch: 3.2
parent: 79153:5f4841977bee
user: Senthil Kumaran <senthil at uthcode.com>
date: Tue Sep 25 02:30:27 2012 -0700
summary:
Issue #16013: Fix CSV Reader parsing issue with ending quote characters. Patch by Serhiy Storchaka.
files:
Lib/test/test_csv.py | 9 +++++++++
Misc/NEWS | 3 +++
Modules/_csv.c | 10 +++++++---
3 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py
--- a/Lib/test/test_csv.py
+++ b/Lib/test/test_csv.py
@@ -225,6 +225,15 @@
self.assertRaises(csv.Error, self._read_test, ['a,b\nc,d'], [])
self.assertRaises(csv.Error, self._read_test, ['a,b\r\nc,d'], [])
+ def test_read_eof(self):
+ self._read_test(['a,"'], [['a', '']])
+ self._read_test(['"a'], [['a']])
+ self._read_test(['^'], [['\n']], escapechar='^')
+ self.assertRaises(csv.Error, self._read_test, ['a,"'], [], strict=True)
+ self.assertRaises(csv.Error, self._read_test, ['"a'], [], strict=True)
+ self.assertRaises(csv.Error, self._read_test,
+ ['^'], [], escapechar='^', strict=True)
+
def test_read_escape(self):
self._read_test(['a,\\b,c'], [['a', 'b', 'c']], escapechar='\\')
self._read_test(['a,b\\,c'], [['a', 'b,c']], escapechar='\\')
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -123,6 +123,9 @@
Library
-------
+- Issue #16013: Fix CSV Reader parsing issue with ending quote characters.
+ Patch by Serhiy Storchaka.
+
- Issue #15421: fix an OverflowError in Calendar.itermonthdates() after
datetime.MAXYEAR. Patch by Cédric Krier.
diff --git a/Modules/_csv.c b/Modules/_csv.c
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -759,9 +759,13 @@
lineobj = PyIter_Next(self->input_iter);
if (lineobj == NULL) {
/* End of input OR exception */
- if (!PyErr_Occurred() && self->field_len != 0)
- PyErr_Format(error_obj,
- "newline inside string");
+ if (!PyErr_Occurred() && (self->field_len != 0 ||
+ self->state == IN_QUOTED_FIELD)) {
+ if (self->dialect->strict)
+ PyErr_SetString(error_obj, "unexpected end of data");
+ else if (parse_save_field(self) >= 0)
+ break;
+ }
return NULL;
}
if (!PyUnicode_Check(lineobj)) {
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list