Skip to content

Commit 23ae987

Browse files
committed
Use PyOS_snprintf when possible.
1 parent 885d457 commit 23ae987

1 file changed

Lines changed: 41 additions & 34 deletions

File tree

Python/getargs.c

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -135,18 +135,19 @@ vgetargs1(PyObject *args, char *format, va_list *p_va, int compat)
135135
if (max == 0) {
136136
if (args == NULL)
137137
return 1;
138-
sprintf(msgbuf, "%.200s%s takes no arguments",
139-
fname==NULL ? "function" : fname,
140-
fname==NULL ? "" : "()");
138+
PyOS_snprintf(msgbuf, sizeof(msgbuf),
139+
"%.200s%s takes no arguments",
140+
fname==NULL ? "function" : fname,
141+
fname==NULL ? "" : "()");
141142
PyErr_SetString(PyExc_TypeError, msgbuf);
142143
return 0;
143144
}
144145
else if (min == 1 && max == 1) {
145146
if (args == NULL) {
146-
sprintf(msgbuf,
147-
"%.200s%s takes at least one argument",
148-
fname==NULL ? "function" : fname,
149-
fname==NULL ? "" : "()");
147+
PyOS_snprintf(msgbuf, sizeof(msgbuf),
148+
"%.200s%s takes at least one argument",
149+
fname==NULL ? "function" : fname,
150+
fname==NULL ? "" : "()");
150151
PyErr_SetString(PyExc_TypeError, msgbuf);
151152
return 0;
152153
}
@@ -173,15 +174,16 @@ vgetargs1(PyObject *args, char *format, va_list *p_va, int compat)
173174

174175
if (len < min || max < len) {
175176
if (message == NULL) {
176-
sprintf(msgbuf,
177-
"%.150s%s takes %s %d argument%s (%d given)",
178-
fname==NULL ? "function" : fname,
179-
fname==NULL ? "" : "()",
180-
min==max ? "exactly"
181-
: len < min ? "at least" : "at most",
182-
len < min ? min : max,
183-
(len < min ? min : max) == 1 ? "" : "s",
184-
len);
177+
PyOS_snprintf(msgbuf, sizeof(msgbuf),
178+
"%.150s%s takes %s %d argument%s "
179+
"(%d given)",
180+
fname==NULL ? "function" : fname,
181+
fname==NULL ? "" : "()",
182+
min==max ? "exactly"
183+
: len < min ? "at least" : "at most",
184+
len < min ? min : max,
185+
(len < min ? min : max) == 1 ? "" : "s",
186+
len);
185187
message = msgbuf;
186188
}
187189
PyErr_SetString(PyExc_TypeError, message);
@@ -222,6 +224,7 @@ seterror(int iarg, char *msg, int *levels, char *fname, char *message)
222224
if (PyErr_Occurred())
223225
return;
224226
else if (message == NULL) {
227+
/* XXX snprintf */
225228
if (fname != NULL) {
226229
sprintf(p, "%.200s() ", fname);
227230
p += strlen(p);
@@ -294,19 +297,20 @@ converttuple(PyObject *arg, char **p_format, va_list *p_va, int *levels,
294297

295298
if (!PySequence_Check(arg) || PyString_Check(arg)) {
296299
levels[0] = 0;
297-
sprintf(msgbuf,
298-
toplevel ? "expected %d arguments, not %.50s" :
299-
"must be %d-item sequence, not %.50s",
300-
n, arg == Py_None ? "None" : arg->ob_type->tp_name);
300+
PyOS_snprintf(msgbuf, sizeof(msgbuf),
301+
toplevel ? "expected %d arguments, not %.50s" :
302+
"must be %d-item sequence, not %.50s",
303+
n,
304+
arg == Py_None ? "None" : arg->ob_type->tp_name);
301305
return msgbuf;
302306
}
303307

304308
if ((i = PySequence_Size(arg)) != n) {
305309
levels[0] = 0;
306-
sprintf(msgbuf,
307-
toplevel ? "expected %d arguments, not %d" :
308-
"must be sequence of length %d, not %d",
309-
n, i);
310+
PyOS_snprintf(msgbuf, sizeof(msgbuf),
311+
toplevel ? "expected %d arguments, not %d" :
312+
"must be sequence of length %d, not %d",
313+
n, i);
310314
return msgbuf;
311315
}
312316

@@ -366,7 +370,9 @@ converterr(char *expected, PyObject *arg, char *msgbuf)
366370
{
367371
assert(expected != NULL);
368372
assert(arg != NULL);
369-
sprintf(msgbuf, "must be %.50s, not %.50s", expected,
373+
/* XXX use snprintf? */
374+
sprintf(msgbuf,
375+
"must be %.50s, not %.50s", expected,
370376
arg == Py_None ? "None" : arg->ob_type->tp_name);
371377
return msgbuf;
372378
}
@@ -1129,15 +1135,16 @@ vgetargskeywords(PyObject *args, PyObject *keywords, char *format,
11291135
are not included in the "%d given" part of the message */
11301136
if (len < min || max < len) {
11311137
if (message == NULL) {
1132-
sprintf(msgbuf,
1133-
"%.200s%s takes %s %d argument%s (%d given)",
1134-
fname==NULL ? "function" : fname,
1135-
fname==NULL ? "" : "()",
1136-
min==max ? "exactly"
1137-
: len < min ? "at least" : "at most",
1138-
len < min ? min : max,
1139-
(len < min ? min : max) == 1 ? "" : "s",
1140-
len);
1138+
PyOS_snprintf(msgbuf, sizeof(msgbuf),
1139+
"%.200s%s takes %s %d argument%s "
1140+
"(%d given)",
1141+
fname==NULL ? "function" : fname,
1142+
fname==NULL ? "" : "()",
1143+
min==max ? "exactly"
1144+
: len < min ? "at least" : "at most",
1145+
len < min ? min : max,
1146+
(len < min ? min : max) == 1 ? "" : "s",
1147+
len);
11411148
message = msgbuf;
11421149
}
11431150
PyErr_SetString(PyExc_TypeError, message);

0 commit comments

Comments
 (0)