Use PyOS_snprintf() at some cost even though it was correct before.

seterror() uses a char array and a pointer to the current position in
that array.  Use snprintf() and compute the amount of space left in
the buffer based on the current pointer position.
This commit is contained in:
Jeremy Hylton 2001-11-28 21:46:59 +00:00
parent 5d3d134d56
commit f16e05e7ec
1 changed files with 7 additions and 6 deletions

View File

@ -224,26 +224,27 @@ seterror(int iarg, char *msg, int *levels, char *fname, char *message)
if (PyErr_Occurred())
return;
else if (message == NULL) {
/* XXX snprintf */
if (fname != NULL) {
sprintf(p, "%.200s() ", fname);
PyOS_snprintf(p, sizeof(buf), "%.200s() ", fname);
p += strlen(p);
}
if (iarg != 0) {
sprintf(p, "argument %d", iarg);
PyOS_snprintf(p, sizeof(buf) - (buf - p),
"argument %d", iarg);
i = 0;
p += strlen(p);
while (levels[i] > 0 && (int)(p-buf) < 220) {
sprintf(p, ", item %d", levels[i]-1);
PyOS_snprintf(p, sizeof(buf) - (buf - p),
", item %d", levels[i]-1);
p += strlen(p);
i++;
}
}
else {
sprintf(p, "argument");
PyOS_snprintf(p, sizeof(buf) - (buf - p), "argument");
p += strlen(p);
}
sprintf(p, " %.256s", msg);
PyOS_snprintf(p, sizeof(buf) - (buf - p), " %.256s", msg);
message = buf;
}
PyErr_SetString(PyExc_TypeError, message);