[Python-checkins] bpo-36254: Fix invalid uses of %d in format strings in C. (GH-12264)

Serhiy Storchaka webhook-mailer at python.org
Wed Mar 13 17:00:21 EDT 2019


https://github.com/python/cpython/commit/d53fe5f407ff4b529628b01a1bcbf21a6aad5c3a
commit: d53fe5f407ff4b529628b01a1bcbf21a6aad5c3a
branch: master
author: Serhiy Storchaka <storchaka at gmail.com>
committer: GitHub <noreply at github.com>
date: 2019年03月13日T22:59:55+02:00
summary:
bpo-36254: Fix invalid uses of %d in format strings in C. (GH-12264)
files:
M Modules/_collectionsmodule.c
M Modules/_ctypes/callbacks.c
M Modules/_ctypes/callproc.c
M Modules/_ctypes/malloc_closure.c
M Modules/_io/winconsoleio.c
M Modules/_localemodule.c
M Modules/_lzmamodule.c
M Modules/_multiprocessing/semaphore.c
M Modules/_ssl.c
M Modules/binascii.c
M Modules/socketmodule.c
M Objects/bytesobject.c
M Objects/odictobject.c
M Objects/structseq.c
M PC/launcher.c
M Python/coreconfig.c
M Python/dynload_win.c
M Python/getargs.c
M Python/hamt.c
M Python/pyarena.c
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 8fb5fc233a65..a40b681d2835 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -2388,7 +2388,7 @@ tuplegetter_descr_get(PyObject *self, PyObject *obj, PyObject *type)
 return self;
 }
 PyErr_Format(PyExc_TypeError,
- "descriptor for index '%d' for tuple subclasses "
+ "descriptor for index '%zd' for tuple subclasses "
 "doesn't apply to '%s' object",
 index,
 obj->ob_type->tp_name);
diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c
index c1e9b723aac6..2b7cb06ea8a9 100644
--- a/Modules/_ctypes/callbacks.c
+++ b/Modules/_ctypes/callbacks.c
@@ -165,14 +165,14 @@ static void _CallPythonObject(void *mem,
 if (cnv)
 dict = PyType_stgdict(cnv);
 else {
- PrintError("Getting argument converter %d\n", i);
+ PrintError("Getting argument converter %zd\n", i);
 goto Done;
 }
 
 if (dict && dict->getfunc && !_ctypes_simple_instance(cnv)) {
 PyObject *v = dict->getfunc(*pArgs, dict->size);
 if (!v) {
- PrintError("create argument %d:\n", i);
+ PrintError("create argument %zd:\n", i);
 Py_DECREF(cnv);
 goto Done;
 }
@@ -186,14 +186,14 @@ static void _CallPythonObject(void *mem,
 /* Hm, shouldn't we use PyCData_AtAddress() or something like that instead? */
 CDataObject *obj = (CDataObject *)_PyObject_CallNoArg(cnv);
 if (!obj) {
- PrintError("create argument %d:\n", i);
+ PrintError("create argument %zd:\n", i);
 Py_DECREF(cnv);
 goto Done;
 }
 if (!CDataObject_Check(obj)) {
 Py_DECREF(obj);
 Py_DECREF(cnv);
- PrintError("unexpected result of create argument %d:\n", i);
+ PrintError("unexpected result of create argument %zd:\n", i);
 goto Done;
 }
 memcpy(obj->b_ptr, *pArgs, dict->size);
@@ -204,7 +204,7 @@ static void _CallPythonObject(void *mem,
 } else {
 PyErr_SetString(PyExc_TypeError,
 "cannot build parameter");
- PrintError("Parsing argument %d\n", i);
+ PrintError("Parsing argument %zd\n", i);
 Py_DECREF(cnv);
 goto Done;
 }
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 9bcc9557ec00..d91e84613b2f 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -1131,20 +1131,20 @@ PyObject *_ctypes_callproc(PPROC pProc,
 converter = PyTuple_GET_ITEM(argtypes, i);
 v = PyObject_CallFunctionObjArgs(converter, arg, NULL);
 if (v == NULL) {
- _ctypes_extend_error(PyExc_ArgError, "argument %d: ", i+1);
+ _ctypes_extend_error(PyExc_ArgError, "argument %zd: ", i+1);
 goto cleanup;
 }
 
 err = ConvParam(v, i+1, pa);
 Py_DECREF(v);
 if (-1 == err) {
- _ctypes_extend_error(PyExc_ArgError, "argument %d: ", i+1);
+ _ctypes_extend_error(PyExc_ArgError, "argument %zd: ", i+1);
 goto cleanup;
 }
 } else {
 err = ConvParam(arg, i+1, pa);
 if (-1 == err) {
- _ctypes_extend_error(PyExc_ArgError, "argument %d: ", i+1);
+ _ctypes_extend_error(PyExc_ArgError, "argument %zd: ", i+1);
 goto cleanup; /* leaking ? */
 }
 }
diff --git a/Modules/_ctypes/malloc_closure.c b/Modules/_ctypes/malloc_closure.c
index 248c6a67022b..8ad76497c7b3 100644
--- a/Modules/_ctypes/malloc_closure.c
+++ b/Modules/_ctypes/malloc_closure.c
@@ -76,7 +76,7 @@ static void more_core(void)
 
 #ifdef MALLOC_CLOSURE_DEBUG
 printf("block at %p allocated (%d bytes), %d ITEMs\n",
- item, count * sizeof(ITEM), count);
+ item, count * (int)sizeof(ITEM), count);
 #endif
 /* put them into the free list */
 for (i = 0; i < count; ++i) {
diff --git a/Modules/_io/winconsoleio.c b/Modules/_io/winconsoleio.c
index dd0997a10580..70a723ed746a 100644
--- a/Modules/_io/winconsoleio.c
+++ b/Modules/_io/winconsoleio.c
@@ -725,7 +725,7 @@ readinto(winconsoleio *self, char *buf, Py_ssize_t len)
 
 if (u8n) {
 PyErr_Format(PyExc_SystemError,
- "Buffer had room for %d bytes but %d bytes required",
+ "Buffer had room for %zd bytes but %u bytes required",
 len, u8n);
 return -1;
 }
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 96ca68af178c..036bdb301f32 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -392,7 +392,7 @@ PyLocale_getdefaultlocale(PyObject* self, PyObject *Py_UNUSED(ignored))
 char encoding[20];
 char locale[100];
 
- PyOS_snprintf(encoding, sizeof(encoding), "cp%d", GetACP());
+ PyOS_snprintf(encoding, sizeof(encoding), "cp%u", GetACP());
 
 if (GetLocaleInfo(LOCALE_USER_DEFAULT,
 LOCALE_SISO639LANGNAME,
diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c
index b5f9561df2ad..18bc3dc296e0 100644
--- a/Modules/_lzmamodule.c
+++ b/Modules/_lzmamodule.c
@@ -219,7 +219,7 @@ parse_filter_spec_lzma(PyObject *spec)
 
 if (lzma_lzma_preset(options, preset)) {
 PyMem_Free(options);
- PyErr_Format(Error, "Invalid compression preset: %d", preset);
+ PyErr_Format(Error, "Invalid compression preset: %u", preset);
 return NULL;
 }
 
@@ -622,7 +622,7 @@ Compressor_init_alone(lzma_stream *lzs, uint32_t preset, PyObject *filterspecs)
 lzma_options_lzma options;
 
 if (lzma_lzma_preset(&options, preset)) {
- PyErr_Format(Error, "Invalid compression preset: %d", preset);
+ PyErr_Format(Error, "Invalid compression preset: %u", preset);
 return -1;
 }
 lzret = lzma_alone_encoder(lzs, &options);
diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c
index bb7219e13070..cbcc64cb578f 100644
--- a/Modules/_multiprocessing/semaphore.c
+++ b/Modules/_multiprocessing/semaphore.c
@@ -141,7 +141,7 @@ semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
 default:
 PyErr_Format(PyExc_RuntimeError, "WaitForSingleObject() or "
 "WaitForMultipleObjects() gave unrecognized "
- "value %d", res);
+ "value %u", res);
 return NULL;
 }
 }
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 0e720e268d93..f2ce7fa627ee 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -3347,7 +3347,7 @@ _ssl__SSLContext__set_alpn_protocols_impl(PySSLContext *self,
 #if HAVE_ALPN
 if ((size_t)protos->len > UINT_MAX) {
 PyErr_Format(PyExc_OverflowError,
- "protocols longer than %d bytes", UINT_MAX);
+ "protocols longer than %u bytes", UINT_MAX);
 return NULL;
 }
 
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 19589f906f72..2e71ab97b05a 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -520,7 +520,7 @@ binascii_a2b_base64_impl(PyObject *module, Py_buffer *data)
 */
 PyErr_Format(Error,
 "Invalid base64-encoded string: "
- "number of data characters (%d) cannot be 1 more "
+ "number of data characters (%zd) cannot be 1 more "
 "than a multiple of 4",
 (bin_data - bin_data_start) / 3 * 4 + 1);
 } else {
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index 8c3c2faddb9d..1120f6b51325 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -4198,7 +4198,7 @@ sock_sendto(PySocketSockObject *s, PyObject *args)
 break;
 default:
 PyErr_Format(PyExc_TypeError,
- "sendto() takes 2 or 3 arguments (%d given)",
+ "sendto() takes 2 or 3 arguments (%zd given)",
 arglen);
 return NULL;
 }
@@ -4741,7 +4741,7 @@ sock_ioctl(PySocketSockObject *s, PyObject *arg)
 return PyLong_FromUnsignedLong(recv); }
 #endif
 default:
- PyErr_Format(PyExc_ValueError, "invalid ioctl command %d", cmd);
+ PyErr_Format(PyExc_ValueError, "invalid ioctl command %lu", cmd);
 return NULL;
 }
 }
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index b299d4871702..0b46ceedf00c 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -1210,7 +1210,7 @@ PyObject *_PyBytes_DecodeEscape(const char *s,
 
 if (!errors || strcmp(errors, "strict") == 0) {
 PyErr_Format(PyExc_ValueError,
- "invalid \\x escape at position %d",
+ "invalid \\x escape at position %zd",
 s - 2 - (end - len));
 goto failed;
 }
diff --git a/Objects/odictobject.c b/Objects/odictobject.c
index 767eb5f60612..6c75a42f4ee7 100644
--- a/Objects/odictobject.c
+++ b/Objects/odictobject.c
@@ -1539,7 +1539,7 @@ odict_init(PyObject *self, PyObject *args, PyObject *kwds)
 if (len == -1)
 return -1;
 if (len > 1) {
- const char *msg = "expected at most 1 arguments, got %d";
+ const char *msg = "expected at most 1 arguments, got %zd";
 PyErr_Format(PyExc_TypeError, msg, len);
 return -1;
 }
@@ -2213,7 +2213,7 @@ mutablemapping_update(PyObject *self, PyObject *args, PyObject *kwargs)
 assert(args == NULL || PyTuple_Check(args));
 len = (args != NULL) ? PyTuple_GET_SIZE(args) : 0;
 if (len > 1) {
- const char *msg = "update() takes at most 1 positional argument (%d given)";
+ const char *msg = "update() takes at most 1 positional argument (%zd given)";
 PyErr_Format(PyExc_TypeError, msg, len);
 return NULL;
 }
diff --git a/Objects/structseq.c b/Objects/structseq.c
index 56b06c707f89..1c37845950fe 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -195,7 +195,7 @@ structseq_repr(PyStructSequence *obj)
 
 cname = typ->tp_members[i].name;
 if (cname == NULL) {
- PyErr_Format(PyExc_SystemError, "In structseq_repr(), member %d name is NULL"
+ PyErr_Format(PyExc_SystemError, "In structseq_repr(), member %zd name is NULL"
 " for type %.500s", i, typ->tp_name);
 return NULL;
 }
diff --git a/PC/launcher.c b/PC/launcher.c
index a4e678115f34..0f5003a8370e 100644
--- a/PC/launcher.c
+++ b/PC/launcher.c
@@ -718,7 +718,7 @@ invoke_child(wchar_t * executable, wchar_t * suffix, wchar_t * cmdline)
 }
 child_command = calloc(child_command_size, sizeof(wchar_t));
 if (child_command == NULL)
- error(RC_CREATE_PROCESS, L"unable to allocate %d bytes for child command.",
+ error(RC_CREATE_PROCESS, L"unable to allocate %zd bytes for child command.",
 child_command_size);
 if (no_suffix)
 _snwprintf_s(child_command, child_command_size,
@@ -1189,7 +1189,7 @@ maybe_handle_shebang(wchar_t ** argv, wchar_t * cmdline)
 
 if (rc == 0) {
 read = fread(buffer, sizeof(char), BUFSIZE, fp);
- debug(L"maybe_handle_shebang: read %d bytes\n", read);
+ debug(L"maybe_handle_shebang: read %zd bytes\n", read);
 fclose(fp);
 
 if ((read >= 4) && (buffer[3] == '\n') && (buffer[2] == '\r')) {
@@ -1209,7 +1209,7 @@ maybe_handle_shebang(wchar_t ** argv, wchar_t * cmdline)
 bom = BOMs; /* points to UTF-8 entry - the default */
 }
 else {
- debug(L"maybe_handle_shebang: BOM found, code page %d\n",
+ debug(L"maybe_handle_shebang: BOM found, code page %u\n",
 bom->code_page);
 start = &buffer[bom->length];
 }
diff --git a/Python/coreconfig.c b/Python/coreconfig.c
index cd4ef22ff69e..845e4c9a163a 100644
--- a/Python/coreconfig.c
+++ b/Python/coreconfig.c
@@ -1103,7 +1103,7 @@ get_locale_encoding(char **locale_encoding)
 {
 #ifdef MS_WINDOWS
 char encoding[20];
- PyOS_snprintf(encoding, sizeof(encoding), "cp%d", GetACP());
+ PyOS_snprintf(encoding, sizeof(encoding), "cp%u", GetACP());
 #elif defined(__ANDROID__) || defined(__VXWORKS__)
 const char *encoding = "UTF-8";
 #else
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 129e04d1b21d..36918c3579d9 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -256,7 +256,7 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
 This should not happen if called correctly. */
 if (theLength == 0) {
 message = PyUnicode_FromFormat(
- "DLL load failed with error code %d",
+ "DLL load failed with error code %u",
 errorCode);
 } else {
 /* For some reason a \r\n
diff --git a/Python/getargs.c b/Python/getargs.c
index ba1a9d4214ff..876f5c76d20b 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -372,14 +372,14 @@ vgetargs1_impl(PyObject *compat_args, PyObject *const *stack, Py_ssize_t nargs,
 if (nargs < min || max < nargs) {
 if (message == NULL)
 PyErr_Format(PyExc_TypeError,
- "%.150s%s takes %s %d argument%s (%ld given)",
+ "%.150s%s takes %s %d argument%s (%zd given)",
 fname==NULL ? "function" : fname,
 fname==NULL ? "" : "()",
 min==max ? "exactly"
 : nargs < min ? "at least" : "at most",
 nargs < min ? min : max,
 (nargs < min ? min : max) == 1 ? "" : "s",
- Py_SAFE_DOWNCAST(nargs, Py_ssize_t, long));
+ nargs);
 else
 PyErr_SetString(PyExc_TypeError, message);
 return cleanreturn(0, &freelist);
@@ -1741,7 +1741,7 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
 else {
 PyErr_Format(PyExc_TypeError,
 "%.200s%s takes %s %d positional argument%s"
- " (%d given)",
+ " (%zd given)",
 (fname == NULL) ? "function" : fname,
 (fname == NULL) ? "" : "()",
 (min != INT_MAX) ? "at most" : "exactly",
@@ -1826,7 +1826,7 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
 if (skip) {
 PyErr_Format(PyExc_TypeError,
 "%.200s%s takes %s %d positional argument%s"
- " (%d given)",
+ " (%zd given)",
 (fname == NULL) ? "function" : fname,
 (fname == NULL) ? "" : "()",
 (Py_MIN(pos, min) < i) ? "at least" : "exactly",
@@ -2194,7 +2194,7 @@ vgetargskeywordsfast_impl(PyObject *const *args, Py_ssize_t nargs,
 Py_ssize_t min = Py_MIN(pos, parser->min);
 PyErr_Format(PyExc_TypeError,
 "%.200s%s takes %s %d positional argument%s"
- " (%d given)",
+ " (%zd given)",
 (parser->fname == NULL) ? "function" : parser->fname,
 (parser->fname == NULL) ? "" : "()",
 min < parser->max ? "at least" : "exactly",
diff --git a/Python/hamt.c b/Python/hamt.c
index aa90d37240a3..67af04c4377c 100644
--- a/Python/hamt.c
+++ b/Python/hamt.c
@@ -2005,7 +2005,7 @@ hamt_node_array_dump(PyHamtNode_Array *node,
 goto error;
 }
 
- if (_hamt_dump_format(writer, "%d::\n", i)) {
+ if (_hamt_dump_format(writer, "%zd::\n", i)) {
 goto error;
 }
 
diff --git a/Python/pyarena.c b/Python/pyarena.c
index abb5729c8ace..aefb787e554f 100644
--- a/Python/pyarena.c
+++ b/Python/pyarena.c
@@ -160,7 +160,7 @@ PyArena_Free(PyArena *arena)
 #if defined(Py_DEBUG)
 /*
 fprintf(stderr,
- "alloc=%d size=%d blocks=%d block_size=%d big=%d objects=%d\n",
+ "alloc=%zu size=%zu blocks=%zu block_size=%zu big=%zu objects=%zu\n",
 arena->total_allocs, arena->total_size, arena->total_blocks,
 arena->total_block_size, arena->total_big_blocks,
 PyList_Size(arena->a_objects));


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /