Mercurial > cpython-lru_cache-weakref
comparison Python/getargs.c @ 44075:f4e7c729b3a2 2.5
Backport of r59241: str.decode fails on very long strings on 64bit platforms.
PyArgs_ParseTuple t# and w# formats truncated the lengths to 32bit.
| author | Amaury Forgeot d'Arc <amauryfa@gmail.com> |
|---|---|
| date | Fri, 30 Nov 2007 21:53:17 +0000 |
| parents | 798935e1295e |
| children | 787b969d37f0 |
comparison
equal
deleted
inserted
replaced
| 44057:9ef85724f4b1 | 44075:f4e7c729b3a2 |
|---|---|
| 892 | 892 |
| 893 case 'e': {/* encoded string */ | 893 case 'e': {/* encoded string */ |
| 894 char **buffer; | 894 char **buffer; |
| 895 const char *encoding; | 895 const char *encoding; |
| 896 PyObject *s; | 896 PyObject *s; |
| 897 int size, recode_strings; | 897 Py_ssize_t size; |
| 898 int recode_strings; | |
| 898 | 899 |
| 899 /* Get 'e' parameter: the encoding name */ | 900 /* Get 'e' parameter: the encoding name */ |
| 900 encoding = (const char *)va_arg(*p_va, const char *); | 901 encoding = (const char *)va_arg(*p_va, const char *); |
| 901 #ifdef Py_USING_UNICODE | 902 #ifdef Py_USING_UNICODE |
| 902 if (encoding == NULL) | 903 if (encoding == NULL) |
| 1142 | 1143 |
| 1143 | 1144 |
| 1144 case 'w': { /* memory buffer, read-write access */ | 1145 case 'w': { /* memory buffer, read-write access */ |
| 1145 void **p = va_arg(*p_va, void **); | 1146 void **p = va_arg(*p_va, void **); |
| 1146 PyBufferProcs *pb = arg->ob_type->tp_as_buffer; | 1147 PyBufferProcs *pb = arg->ob_type->tp_as_buffer; |
| 1147 int count; | 1148 Py_ssize_t count; |
| 1148 | 1149 |
| 1149 if (pb == NULL || | 1150 if (pb == NULL || |
| 1150 pb->bf_getwritebuffer == NULL || | 1151 pb->bf_getwritebuffer == NULL || |
| 1151 pb->bf_getsegcount == NULL) | 1152 pb->bf_getsegcount == NULL) |
| 1152 return converterr("read-write buffer", arg, msgbuf, bufsize); | 1153 return converterr("read-write buffer", arg, msgbuf, bufsize); |
| 1164 } | 1165 } |
| 1165 | 1166 |
| 1166 case 't': { /* 8-bit character buffer, read-only access */ | 1167 case 't': { /* 8-bit character buffer, read-only access */ |
| 1167 char **p = va_arg(*p_va, char **); | 1168 char **p = va_arg(*p_va, char **); |
| 1168 PyBufferProcs *pb = arg->ob_type->tp_as_buffer; | 1169 PyBufferProcs *pb = arg->ob_type->tp_as_buffer; |
| 1169 int count; | 1170 Py_ssize_t count; |
| 1170 | 1171 |
| 1171 if (*format++ != '#') | 1172 if (*format++ != '#') |
| 1172 return converterr( | 1173 return converterr( |
| 1173 "invalid use of 't' format character", | 1174 "invalid use of 't' format character", |
| 1174 arg, msgbuf, bufsize); | 1175 arg, msgbuf, bufsize); |
