Kaydet (Commit) 2f2fee19 authored tarafından Christian Heimes's avatar Christian Heimes

va_end() all va_copy()ed va_lists.

üst 1c56bf0b
...@@ -2702,6 +2702,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size, ...@@ -2702,6 +2702,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size,
else { else {
stack = PyMem_Malloc(n * sizeof(stack[0])); stack = PyMem_Malloc(n * sizeof(stack[0]));
if (stack == NULL) { if (stack == NULL) {
va_end(countva);
PyErr_NoMemory(); PyErr_NoMemory();
return NULL; return NULL;
} }
...@@ -2710,6 +2711,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size, ...@@ -2710,6 +2711,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size,
for (i = 0; i < n; ++i) { for (i = 0; i < n; ++i) {
stack[i] = va_arg(va, PyObject *); stack[i] = va_arg(va, PyObject *);
} }
va_end(countva);
return stack; return stack;
} }
......
...@@ -2891,6 +2891,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) ...@@ -2891,6 +2891,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
do do
{ {
if ((unsigned char)*p > 127) { if ((unsigned char)*p > 127) {
va_end(vargs2);
PyErr_Format(PyExc_ValueError, PyErr_Format(PyExc_ValueError,
"PyUnicode_FromFormatV() expects an ASCII-encoded format " "PyUnicode_FromFormatV() expects an ASCII-encoded format "
"string, got a non-ASCII byte: 0x%02x", "string, got a non-ASCII byte: 0x%02x",
...@@ -2911,9 +2912,11 @@ PyUnicode_FromFormatV(const char *format, va_list vargs) ...@@ -2911,9 +2912,11 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
f = p; f = p;
} }
} }
va_end(vargs2);
return _PyUnicodeWriter_Finish(&writer); return _PyUnicodeWriter_Finish(&writer);
fail: fail:
va_end(vargs2);
_PyUnicodeWriter_Dealloc(&writer); _PyUnicodeWriter_Dealloc(&writer);
return NULL; return NULL;
} }
......
...@@ -141,20 +141,26 @@ int ...@@ -141,20 +141,26 @@ int
PyArg_VaParse(PyObject *args, const char *format, va_list va) PyArg_VaParse(PyObject *args, const char *format, va_list va)
{ {
va_list lva; va_list lva;
int retval;
va_copy(lva, va); va_copy(lva, va);
return vgetargs1(args, format, &lva, 0); retval = vgetargs1(args, format, &lva, 0);
va_end(lva);
return retval;
} }
int int
_PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va) _PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va)
{ {
va_list lva; va_list lva;
int retval;
va_copy(lva, va); va_copy(lva, va);
return vgetargs1(args, format, &lva, FLAG_SIZE_T); retval = vgetargs1(args, format, &lva, FLAG_SIZE_T);
va_end(lva);
return retval;
} }
...@@ -1405,6 +1411,7 @@ PyArg_VaParseTupleAndKeywords(PyObject *args, ...@@ -1405,6 +1411,7 @@ PyArg_VaParseTupleAndKeywords(PyObject *args,
va_copy(lva, va); va_copy(lva, va);
retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0); retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0);
va_end(lva);
return retval; return retval;
} }
...@@ -1430,6 +1437,7 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args, ...@@ -1430,6 +1437,7 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
retval = vgetargskeywords(args, keywords, format, retval = vgetargskeywords(args, keywords, format,
kwlist, &lva, FLAG_SIZE_T); kwlist, &lva, FLAG_SIZE_T);
va_end(lva);
return retval; return retval;
} }
...@@ -1534,6 +1542,7 @@ _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords, ...@@ -1534,6 +1542,7 @@ _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords,
va_copy(lva, va); va_copy(lva, va);
retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0); retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0);
va_end(lva);
return retval; return retval;
} }
...@@ -1555,6 +1564,7 @@ _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords, ...@@ -1555,6 +1564,7 @@ _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords,
va_copy(lva, va); va_copy(lva, va);
retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T); retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T);
va_end(lva);
return retval; return retval;
} }
......
...@@ -467,8 +467,7 @@ va_build_value(const char *format, va_list va, int flags) ...@@ -467,8 +467,7 @@ va_build_value(const char *format, va_list va, int flags)
const char *f = format; const char *f = format;
int n = countformat(f, '\0'); int n = countformat(f, '\0');
va_list lva; va_list lva;
PyObject *retval;
va_copy(lva, va);
if (n < 0) if (n < 0)
return NULL; return NULL;
...@@ -476,9 +475,14 @@ va_build_value(const char *format, va_list va, int flags) ...@@ -476,9 +475,14 @@ va_build_value(const char *format, va_list va, int flags)
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;
} }
if (n == 1) va_copy(lva, va);
return do_mkvalue(&f, &lva, flags); if (n == 1) {
return do_mktuple(&f, &lva, '\0', n, flags); retval = do_mkvalue(&f, &lva, flags);
} else {
retval = do_mktuple(&f, &lva, '\0', n, flags);
}
va_end(lva);
return retval;
} }
......
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