Kaydet (Commit) d81ad0df authored tarafından Benjamin Peterson's avatar Benjamin Peterson

check for overflow in join_append_data (closes #27758)

Reported by Thomas E. Hybel
üst 04a53853
...@@ -29,6 +29,9 @@ Core and Builtins ...@@ -29,6 +29,9 @@ Core and Builtins
Library Library
------- -------
- Issue #27758: Fix possible integer overflow in the _csv module for large record
lengths.
- Issue #23369: Fixed possible integer overflow in - Issue #23369: Fixed possible integer overflow in
_json.encode_basestring_ascii. _json.encode_basestring_ascii.
......
...@@ -985,11 +985,19 @@ join_append_data(WriterObj *self, char *field, int quote_empty, ...@@ -985,11 +985,19 @@ join_append_data(WriterObj *self, char *field, int quote_empty,
int i, rec_len; int i, rec_len;
char *lineterm; char *lineterm;
#define ADDCH(c) \ #define INCLEN \
do {\
if (!copy_phase && rec_len == INT_MAX) { \
goto overflow; \
} \
rec_len++; \
} while(0)
#define ADDCH(c) \
do {\ do {\
if (copy_phase) \ if (copy_phase) \
self->rec[rec_len] = c;\ self->rec[rec_len] = c;\
rec_len++;\ INCLEN;\
} while(0) } while(0)
lineterm = PyString_AsString(dialect->lineterminator); lineterm = PyString_AsString(dialect->lineterminator);
...@@ -1059,11 +1067,18 @@ join_append_data(WriterObj *self, char *field, int quote_empty, ...@@ -1059,11 +1067,18 @@ join_append_data(WriterObj *self, char *field, int quote_empty,
if (*quoted) { if (*quoted) {
if (copy_phase) if (copy_phase)
ADDCH(dialect->quotechar); ADDCH(dialect->quotechar);
else else {
rec_len += 2; INCLEN; /* starting quote */
INCLEN; /* ending quote */
}
} }
return rec_len; return rec_len;
overflow:
PyErr_NoMemory();
return -1;
#undef ADDCH #undef ADDCH
#undef INCLEN
} }
static int static int
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment