Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2.7] bpo-38730: Fix -Wstringop-truncation warnings. #17075

Merged
merged 1 commit into from Nov 7, 2019
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -0,0 +1 @@
Fix problems identified by GCC's ``-Wstringop-truncation`` warning.
@@ -486,7 +486,7 @@ calculate_path(void)
if (tmpbuffer[0] == SEP)
/* tmpbuffer should never be longer than MAXPATHLEN,
but extra check does not hurt */
strncpy(argv0_path, tmpbuffer, MAXPATHLEN);
strncpy(argv0_path, tmpbuffer, MAXPATHLEN + 1);
else {
/* Interpret relative to progpath */
reduce(argv0_path);
@@ -1055,14 +1055,15 @@ validate_numnodes(node *n, int num, const char *const name)
static int
validate_terminal(node *terminal, int type, char *string)
{
int res = (validate_ntype(terminal, type)
&& ((string == 0) || (strcmp(string, STR(terminal)) == 0)));

if (!res && !PyErr_Occurred()) {
if (!validate_ntype(terminal, type)) {
return 0;
}
if (string != NULL && strcmp(string, STR(terminal)) != 0) {
PyErr_Format(parser_error,
"Illegal terminal: expected \"%s\"", string);
return 0;
}
return (res);
return 1;
}


@@ -1180,7 +1180,7 @@ call_readline(FILE *sys_stdin, FILE *sys_stdout, char *prompt)
q = p;
p = PyMem_Malloc(n+2);
if (p != NULL) {
strncpy(p, q, n);
memcpy(p, q, n);
p[n] = '\n';
p[n+1] = '\0';
}
@@ -173,8 +173,10 @@ trip_signal(int sig_num)
cleared in PyErr_CheckSignals() before .tripped. */
is_tripped = 1;
Py_AddPendingCall(checksignals_witharg, NULL);
if (wakeup_fd != -1)
write(wakeup_fd, "\0", 1);
if (wakeup_fd != -1) {
int rc = write(wakeup_fd, "\0", 1);
(void)rc;
}
}

static void
@@ -714,8 +714,8 @@ read_directory(const char *archive)
unsigned int count, i;
unsigned char buffer[46];
size_t length;
char path[MAXPATHLEN + 5];
char name[MAXPATHLEN + 5];
char name[MAXPATHLEN + 1];
char path[2*MAXPATHLEN + 2]; /* archive + SEP + name + '\0' */
const char *errmsg = NULL;

if (strlen(archive) > MAXPATHLEN) {
@@ -838,7 +838,7 @@ read_directory(const char *archive)
}
}

strncpy(path + length + 1, name, MAXPATHLEN - length - 1);
memcpy(path + length + 1, name, name_size + 1);

t = Py_BuildValue("sHIIkHHI", path, compress, data_size,
file_size, file_offset, time, date, crc);
@@ -252,10 +252,7 @@ structseq_repr(PyStructSequence *obj)
}

/* "typename(", limited to TYPE_MAXSIZE */
len = strlen(typ->tp_name) > TYPE_MAXSIZE ? TYPE_MAXSIZE :
strlen(typ->tp_name);
strncpy(pbuf, typ->tp_name, len);
pbuf += len;
pbuf = stpncpy(pbuf, typ->tp_name, TYPE_MAXSIZE);
*pbuf++ = '(';

for (i=0; i < VISIBLE_SIZE(obj); i++) {
@@ -221,7 +221,7 @@ _Py_Mangle(PyObject *privateobj, PyObject *ident)
}
plen = strlen(p);

if (plen + nlen >= PY_SSIZE_T_MAX - 1) {
if (nlen >= PY_SSIZE_T_MAX - 1 - plen) {
PyErr_SetString(PyExc_OverflowError,
"private identifier too large to be mangled");
return NULL;
@@ -233,7 +233,7 @@ _Py_Mangle(PyObject *privateobj, PyObject *ident)
/* ident = "_" + p[:plen] + name # i.e. 1+plen+nlen bytes */
buffer = PyString_AS_STRING(ident);
buffer[0] = '_';
strncpy(buffer+1, p, plen);
memcpy(buffer+1, p, plen);
strcpy(buffer+1+plen, name);
return ident;
}