Skip to content

Commit 5c0eed7

Browse files
berkerpeksagTapuzi
andauthored
bpo-12178: Fix escaping of escapechar in csv.writer() (GH-13710)
Co-authored-by: Itay Elbirt <[email protected]>
1 parent bfee9fa commit 5c0eed7

File tree

3 files changed

+20
-0
lines changed

3 files changed

+20
-0
lines changed

Lib/test/test_csv.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,20 @@ def test_write_escape(self):
202202
escapechar='\\', quoting = csv.QUOTE_NONE)
203203
self._write_test(['a',1,'p,q'], 'a,1,p\\,q',
204204
escapechar='\\', quoting = csv.QUOTE_NONE)
205+
self._write_test(['\\', 'a'], '\\\\,a',
206+
escapechar='\\', quoting=csv.QUOTE_NONE)
207+
self._write_test(['\\', 'a'], '\\\\,a',
208+
escapechar='\\', quoting=csv.QUOTE_MINIMAL)
209+
self._write_test(['\\', 'a'], '"\\\\","a"',
210+
escapechar='\\', quoting=csv.QUOTE_ALL)
211+
self._write_test(['\\ ', 'a'], '\\\\ ,a',
212+
escapechar='\\', quoting=csv.QUOTE_MINIMAL)
213+
self._write_test(['\\,', 'a'], '\\\\\\,,a',
214+
escapechar='\\', quoting=csv.QUOTE_NONE)
215+
self._write_test([',\\', 'a'], '",\\\\",a',
216+
escapechar='\\', quoting=csv.QUOTE_MINIMAL)
217+
self._write_test(['C\\', '6', '7', 'X"'], 'C\\\\,6,7,"X"""',
218+
escapechar='\\', quoting=csv.QUOTE_MINIMAL)
205219

206220
def test_write_iterable(self):
207221
self._write_test(iter(['a', 1, 'p,q']), 'a,1,"p,q"')
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
:func:`csv.writer` now correctly escapes *escapechar* when input
2+
contains *escapechar*. Patch by Catalin Iacob, Berker Peksag,
3+
and Itay Elbirt.

Modules/_csv.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,9 @@ join_append_data(WriterObj *self, unsigned int field_kind, const void *field_dat
10401040
else
10411041
want_escape = 1;
10421042
}
1043+
else if (c == dialect->escapechar) {
1044+
want_escape = 1;
1045+
}
10431046
if (!want_escape)
10441047
*quoted = 1;
10451048
}

0 commit comments

Comments
 (0)