From d53fe5f407ff4b529628b01a1bcbf21a6aad5c3a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Wed, 13 Mar 2019 22:59:55 +0200 Subject: bpo-36254: Fix invalid uses of %d in format strings in C. (GH-12264) --- Modules/_collectionsmodule.c | 2 +- Modules/_ctypes/callbacks.c | 10 +++++----- Modules/_ctypes/callproc.c | 6 +++--- Modules/_ctypes/malloc_closure.c | 2 +- Modules/_io/winconsoleio.c | 2 +- Modules/_localemodule.c | 2 +- Modules/_lzmamodule.c | 4 ++-- Modules/_multiprocessing/semaphore.c | 2 +- Modules/_ssl.c | 2 +- Modules/binascii.c | 2 +- Modules/socketmodule.c | 4 ++-- Objects/bytesobject.c | 2 +- Objects/odictobject.c | 4 ++-- Objects/structseq.c | 2 +- PC/launcher.c | 6 +++--- Python/coreconfig.c | 2 +- Python/dynload_win.c | 2 +- Python/getargs.c | 10 +++++----- Python/hamt.c | 2 +- Python/pyarena.c | 2 +- 20 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 8fb5fc2..a40b681 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 c1e9b72..2b7cb06 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 9bcc955..d91e846 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 248c6a6..8ad7649 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 dd0997a..70a723e 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 96ca68a..036bdb3 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 b5f9561..18bc3dc 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 bb7219e..cbcc64c 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 0e720e2..f2ce7fa 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 19589f9..2e71ab9 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 8c3c2fa..1120f6b 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 b299d48..0b46cee 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 767eb5f..6c75a42 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 56b06c7..1c37845 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 a4e6781..0f5003a 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 cd4ef22..845e4c9 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 129e04d..36918c3 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 ba1a9d4..876f5c7 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 aa90d37..67af04c 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 abb5729..aefb787 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)); -- cgit v0.12