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

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

Merged
merged 1 commit into from
Mar 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
[3.7] bpo-36254: Fix invalid uses of %d in format strings in C. (GH-1…
…2264).

(cherry picked from commit d53fe5f)

Co-authored-by: Serhiy Storchaka <[email protected]>
  • Loading branch information
serhiy-storchaka committed Mar 14, 2019
commit 3d7570bd5763bb6cb7dd814c9eb19755f9083513
10 changes: 5 additions & 5 deletions Modules/_ctypes/callbacks.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,14 +160,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;
}
Expand All @@ -181,14 +181,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);
Expand All @@ -199,7 +199,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;
}
Expand Down
6 changes: 3 additions & 3 deletions Modules/_ctypes/callproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1125,20 +1125,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 ? */
}
}
Expand Down
2 changes: 1 addition & 1 deletion Modules/_ctypes/malloc_closure.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion Modules/_io/winconsoleio.c
Original file line number Diff line number Diff line change
Expand Up @@ -724,7 +724,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;
}
Expand Down
2 changes: 1 addition & 1 deletion Modules/_localemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ PyLocale_getdefaultlocale(PyObject* self)
char encoding[100];
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,
Expand Down
4 changes: 2 additions & 2 deletions Modules/_lzmamodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -630,7 +630,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);
Expand Down
2 changes: 1 addition & 1 deletion Modules/_multiprocessing/semaphore.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Expand Down
2 changes: 1 addition & 1 deletion Modules/_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -3348,7 +3348,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;
}

Expand Down
2 changes: 1 addition & 1 deletion Modules/binascii.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 2 additions & 2 deletions Modules/socketmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -4102,7 +4102,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;
}
Expand Down Expand Up @@ -4642,7 +4642,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;
}
}
Expand Down
2 changes: 1 addition & 1 deletion Objects/bytesobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1209,7 +1209,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;
}
Expand Down
4 changes: 2 additions & 2 deletions Objects/odictobject.c
Original file line number Diff line number Diff line change
Expand Up @@ -1538,7 +1538,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;
}
Expand Down Expand Up @@ -2211,7 +2211,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;
}
Expand Down
2 changes: 1 addition & 1 deletion Objects/structseq.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,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;
}
Expand Down
6 changes: 3 additions & 3 deletions PC/launcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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')) {
Expand All @@ -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];
}
Expand Down
2 changes: 1 addition & 1 deletion Python/dynload_win.c
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,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
Expand Down
12 changes: 6 additions & 6 deletions Python/getargs.c
Original file line number Diff line number Diff line change
Expand Up @@ -371,14 +371,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);
Expand Down Expand Up @@ -1718,7 +1718,7 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
else {
PyErr_Format(PyExc_TypeError,
"%.200s%s takes %s %d positional arguments"
" (%d given)",
" (%zd given)",
(fname == NULL) ? "function" : fname,
(fname == NULL) ? "" : "()",
(min != INT_MAX) ? "at most" : "exactly",
Expand Down Expand Up @@ -1797,7 +1797,7 @@ vgetargskeywords(PyObject *args, PyObject *kwargs, const char *format,
if (skip) {
PyErr_Format(PyExc_TypeError,
"%.200s%s takes %s %d positional arguments"
" (%d given)",
" (%zd given)",
(fname == NULL) ? "function" : fname,
(fname == NULL) ? "" : "()",
(Py_MIN(pos, min) < i) ? "at least" : "exactly",
Expand Down Expand Up @@ -2103,7 +2103,7 @@ vgetargskeywordsfast_impl(PyObject *const *args, Py_ssize_t nargs,
}
else {
PyErr_Format(PyExc_TypeError,
"%.200s%s takes %s %d positional arguments (%d given)",
"%.200s%s takes %s %d positional arguments (%zd given)",
(parser->fname == NULL) ? "function" : parser->fname,
(parser->fname == NULL) ? "" : "()",
(parser->min != INT_MAX) ? "at most" : "exactly",
Expand Down Expand Up @@ -2152,7 +2152,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 arguments"
" (%d given)",
" (%zd given)",
(parser->fname == NULL) ? "function" : parser->fname,
(parser->fname == NULL) ? "" : "()",
min < parser->max ? "at least" : "exactly",
Expand Down
2 changes: 1 addition & 1 deletion Python/hamt.c
Original file line number Diff line number Diff line change
Expand Up @@ -2003,7 +2003,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;
}

Expand Down
2 changes: 1 addition & 1 deletion Python/pyarena.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down