[Python-checkins] cpython (merge 3.6 -> default): va_end() all va_copy()ed va_lists.
christian.heimes
python-checkins at python.org
Wed Sep 21 05:37:47 EDT 2016
https://hg.python.org/cpython/rev/b355c4c380f5
changeset: 103983:b355c4c380f5
parent: 103981:128da01095a2
parent: 103982:c99600106976
user: Christian Heimes <christian at python.org>
date: Wed Sep 21 11:37:38 2016 +0200
summary:
va_end() all va_copy()ed va_lists.
files:
Objects/abstract.c | 2 ++
Objects/unicodeobject.c | 3 +++
Python/getargs.c | 14 ++++++++++++--
Python/modsupport.c | 14 +++++++++-----
4 files changed, 26 insertions(+), 7 deletions(-)
diff --git a/Objects/abstract.c b/Objects/abstract.c
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -2702,6 +2702,7 @@
else {
stack = PyMem_Malloc(n * sizeof(stack[0]));
if (stack == NULL) {
+ va_end(countva);
PyErr_NoMemory();
return NULL;
}
@@ -2710,6 +2711,7 @@
for (i = 0; i < n; ++i) {
stack[i] = va_arg(va, PyObject *);
}
+ va_end(countva);
return stack;
}
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -2891,6 +2891,7 @@
do
{
if ((unsigned char)*p > 127) {
+ va_end(vargs2);
PyErr_Format(PyExc_ValueError,
"PyUnicode_FromFormatV() expects an ASCII-encoded format "
"string, got a non-ASCII byte: 0x%02x",
@@ -2911,9 +2912,11 @@
f = p;
}
}
+ va_end(vargs2);
return _PyUnicodeWriter_Finish(&writer);
fail:
+ va_end(vargs2);
_PyUnicodeWriter_Dealloc(&writer);
return NULL;
}
diff --git a/Python/getargs.c b/Python/getargs.c
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -141,20 +141,26 @@
PyArg_VaParse(PyObject *args, const char *format, va_list va)
{
va_list lva;
+ int retval;
va_copy(lva, va);
- return vgetargs1(args, format, &lva, 0);
+ retval = vgetargs1(args, format, &lva, 0);
+ va_end(lva);
+ return retval;
}
int
_PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va)
{
va_list lva;
+ int retval;
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 @@
va_copy(lva, va);
retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0);
+ va_end(lva);
return retval;
}
@@ -1430,6 +1437,7 @@
retval = vgetargskeywords(args, keywords, format,
kwlist, &lva, FLAG_SIZE_T);
+ va_end(lva);
return retval;
}
@@ -1534,6 +1542,7 @@
va_copy(lva, va);
retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0);
+ va_end(lva);
return retval;
}
@@ -1555,6 +1564,7 @@
va_copy(lva, va);
retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T);
+ va_end(lva);
return retval;
}
diff --git a/Python/modsupport.c b/Python/modsupport.c
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -467,8 +467,7 @@
const char *f = format;
int n = countformat(f, '\0');
va_list lva;
-
- va_copy(lva, va);
+ PyObject *retval;
if (n < 0)
return NULL;
@@ -476,9 +475,14 @@
Py_INCREF(Py_None);
return Py_None;
}
- if (n == 1)
- return do_mkvalue(&f, &lva, flags);
- return do_mktuple(&f, &lva, '\0', n, flags);
+ va_copy(lva, va);
+ if (n == 1) {
+ retval = do_mkvalue(&f, &lva, flags);
+ } else {
+ retval = do_mktuple(&f, &lva, '\0', n, flags);
+ }
+ va_end(lva);
+ return retval;
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list