]> granicus.if.org Git - python/commitdiff
Fix compiler warning in structseq_repr() (GH-10841)
authorVictor Stinner <vstinner@redhat.com>
Sat, 1 Dec 2018 01:46:40 +0000 (02:46 +0100)
committerGitHub <noreply@github.com>
Sat, 1 Dec 2018 01:46:40 +0000 (02:46 +0100)
Replace strncpy() with memcpy() in structseq_repr() to fix the
following compiler warning:

Objects/structseq.c:187:5: warning: 'strncpy' specified bound depends on the length of the source argument [-Wstringop-overflow=]
     strncpy(pbuf, typ->tp_name, len);
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Objects/structseq.c:185:11: note: length computed here
     len = strlen(typ->tp_name) > TYPE_MAXSIZE ? TYPE_MAXSIZE :

The function writes the terminating NUL byte later.

Objects/structseq.c

index 05ea87b67a82b3aefe5872b167d3e3c4765030ac..cf94155f18f833d27b81aae0cef98d4e4eb55f02 100644 (file)
@@ -182,9 +182,9 @@ structseq_repr(PyStructSequence *obj)
     endofbuf= &buf[REPR_BUFFER_SIZE-5];
 
     /* "typename(", limited to  TYPE_MAXSIZE */
-    len = strlen(typ->tp_name) > TYPE_MAXSIZE ? TYPE_MAXSIZE :
-                            strlen(typ->tp_name);
-    strncpy(pbuf, typ->tp_name, len);
+    len = strlen(typ->tp_name);
+    len = Py_MIN(len, TYPE_MAXSIZE);
+    memcpy(pbuf, typ->tp_name, len);
     pbuf += len;
     *pbuf++ = '(';