mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
va_end() all va_copy()ed va_lists.
This commit is contained in:
parent
1c56bf0bad
commit
2f2fee19ec
4 changed files with 26 additions and 7 deletions
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
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,
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue