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);