mirror of
https://github.com/python/cpython.git
synced 2025-07-13 14:25:18 +00:00
mysnprintf.c: Massive rewrite of PyOS_snprintf and PyOS_vsnprintf, to
use wrappers on all platforms, to make this as consistent as possible x- platform (in particular, make sure there's at least one \0 byte in the output buffer). Also document more of the truth about what these do. getargs.c, seterror(): Three computations of remaining buffer size were backwards, thus telling PyOS_snprintf the buffer is larger than it actually is. This matters a lot now that PyOS_snprintf ensures there's a trailing \0 byte (because it didn't get the truth about the buffer size, it was storing \0 beyond the true end of the buffer). sysmodule.c, mywrite(): Simplify, now that PyOS_vsnprintf guarantees to produce a \0 byte.
This commit is contained in:
parent
17d0154097
commit
faad5ad590
4 changed files with 87 additions and 103 deletions
|
@ -231,7 +231,7 @@ seterror(int iarg, char *msg, int *levels, char *fname, char *message)
|
|||
p += strlen(p);
|
||||
}
|
||||
if (iarg != 0) {
|
||||
PyOS_snprintf(p, sizeof(buf) - (buf - p),
|
||||
PyOS_snprintf(p, sizeof(buf) - (p - buf),
|
||||
"argument %d", iarg);
|
||||
i = 0;
|
||||
p += strlen(p);
|
||||
|
@ -243,10 +243,10 @@ seterror(int iarg, char *msg, int *levels, char *fname, char *message)
|
|||
}
|
||||
}
|
||||
else {
|
||||
PyOS_snprintf(p, sizeof(buf) - (buf - p), "argument");
|
||||
PyOS_snprintf(p, sizeof(buf) - (p - buf), "argument");
|
||||
p += strlen(p);
|
||||
}
|
||||
PyOS_snprintf(p, sizeof(buf) - (buf - p), " %.256s", msg);
|
||||
PyOS_snprintf(p, sizeof(buf) - (p - buf), " %.256s", msg);
|
||||
message = buf;
|
||||
}
|
||||
PyErr_SetString(PyExc_TypeError, message);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue