Skip to content

Commit 2f2fee1

Browse files
committed
va_end() all va_copy()ed va_lists.
1 parent 1c56bf0 commit 2f2fee1

File tree

4 files changed

+26
-7
lines changed

4 files changed

+26
-7
lines changed

Objects/abstract.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2702,6 +2702,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size,
27022702
else {
27032703
stack = PyMem_Malloc(n * sizeof(stack[0]));
27042704
if (stack == NULL) {
2705+
va_end(countva);
27052706
PyErr_NoMemory();
27062707
return NULL;
27072708
}
@@ -2710,6 +2711,7 @@ objargs_mkstack(PyObject **small_stack, Py_ssize_t small_stack_size,
27102711
for (i = 0; i < n; ++i) {
27112712
stack[i] = va_arg(va, PyObject *);
27122713
}
2714+
va_end(countva);
27132715
return stack;
27142716
}
27152717

Objects/unicodeobject.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2891,6 +2891,7 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
28912891
do
28922892
{
28932893
if ((unsigned char)*p > 127) {
2894+
va_end(vargs2);
28942895
PyErr_Format(PyExc_ValueError,
28952896
"PyUnicode_FromFormatV() expects an ASCII-encoded format "
28962897
"string, got a non-ASCII byte: 0x%02x",
@@ -2911,9 +2912,11 @@ PyUnicode_FromFormatV(const char *format, va_list vargs)
29112912
f = p;
29122913
}
29132914
}
2915+
va_end(vargs2);
29142916
return _PyUnicodeWriter_Finish(&writer);
29152917

29162918
fail:
2919+
va_end(vargs2);
29172920
_PyUnicodeWriter_Dealloc(&writer);
29182921
return NULL;
29192922
}

Python/getargs.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,20 +141,26 @@ int
141141
PyArg_VaParse(PyObject *args, const char *format, va_list va)
142142
{
143143
va_list lva;
144+
int retval;
144145

145146
va_copy(lva, va);
146147

147-
return vgetargs1(args, format, &lva, 0);
148+
retval = vgetargs1(args, format, &lva, 0);
149+
va_end(lva);
150+
return retval;
148151
}
149152

150153
int
151154
_PyArg_VaParse_SizeT(PyObject *args, const char *format, va_list va)
152155
{
153156
va_list lva;
157+
int retval;
154158

155159
va_copy(lva, va);
156160

157-
return vgetargs1(args, format, &lva, FLAG_SIZE_T);
161+
retval = vgetargs1(args, format, &lva, FLAG_SIZE_T);
162+
va_end(lva);
163+
return retval;
158164
}
159165

160166

@@ -1405,6 +1411,7 @@ PyArg_VaParseTupleAndKeywords(PyObject *args,
14051411
va_copy(lva, va);
14061412

14071413
retval = vgetargskeywords(args, keywords, format, kwlist, &lva, 0);
1414+
va_end(lva);
14081415
return retval;
14091416
}
14101417

@@ -1430,6 +1437,7 @@ _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *args,
14301437

14311438
retval = vgetargskeywords(args, keywords, format,
14321439
kwlist, &lva, FLAG_SIZE_T);
1440+
va_end(lva);
14331441
return retval;
14341442
}
14351443

@@ -1534,6 +1542,7 @@ _PyArg_VaParseTupleAndKeywordsFast(PyObject *args, PyObject *keywords,
15341542
va_copy(lva, va);
15351543

15361544
retval = vgetargskeywordsfast(args, keywords, parser, &lva, 0);
1545+
va_end(lva);
15371546
return retval;
15381547
}
15391548

@@ -1555,6 +1564,7 @@ _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *args, PyObject *keywords,
15551564
va_copy(lva, va);
15561565

15571566
retval = vgetargskeywordsfast(args, keywords, parser, &lva, FLAG_SIZE_T);
1567+
va_end(lva);
15581568
return retval;
15591569
}
15601570

Python/modsupport.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -467,18 +467,22 @@ va_build_value(const char *format, va_list va, int flags)
467467
const char *f = format;
468468
int n = countformat(f, '\0');
469469
va_list lva;
470-
471-
va_copy(lva, va);
470+
PyObject *retval;
472471

473472
if (n < 0)
474473
return NULL;
475474
if (n == 0) {
476475
Py_INCREF(Py_None);
477476
return Py_None;
478477
}
479-
if (n == 1)
480-
return do_mkvalue(&f, &lva, flags);
481-
return do_mktuple(&f, &lva, '\0', n, flags);
478+
va_copy(lva, va);
479+
if (n == 1) {
480+
retval = do_mkvalue(&f, &lva, flags);
481+
} else {
482+
retval = do_mktuple(&f, &lva, '\0', n, flags);
483+
}
484+
va_end(lva);
485+
return retval;
482486
}
483487

484488

0 commit comments

Comments
 (0)