mirror of
https://github.com/python/cpython.git
synced 2025-07-31 07:04:42 +00:00
I'm not sure why this code allocates this string for the error message.
I think it would be better to always use snprintf and have the format limit the size of the name appropriately (like %.200s). Klocwork #340
This commit is contained in:
parent
ef0de023db
commit
b45f351832
1 changed files with 11 additions and 2 deletions
|
@ -1078,6 +1078,7 @@ unicodedata_lookup(PyObject* self, PyObject* args)
|
|||
{
|
||||
Py_UCS4 code;
|
||||
Py_UNICODE str[1];
|
||||
char errbuf[256];
|
||||
|
||||
char* name;
|
||||
int namelen;
|
||||
|
@ -1085,11 +1086,19 @@ unicodedata_lookup(PyObject* self, PyObject* args)
|
|||
return NULL;
|
||||
|
||||
if (!_getcode(self, name, namelen, &code)) {
|
||||
/* XXX(nnorwitz): why are we allocating for the error msg?
|
||||
Why not always use snprintf? */
|
||||
char fmt[] = "undefined character name '%s'";
|
||||
char *buf = PyMem_MALLOC(sizeof(fmt) + namelen);
|
||||
sprintf(buf, fmt, name);
|
||||
if (buf)
|
||||
sprintf(buf, fmt, name);
|
||||
else {
|
||||
buf = errbuf;
|
||||
PyOS_snprintf(buf, sizeof(errbuf), fmt, name);
|
||||
}
|
||||
PyErr_SetString(PyExc_KeyError, buf);
|
||||
PyMem_FREE(buf);
|
||||
if (buf != errbuf)
|
||||
PyMem_FREE(buf);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue