summaryrefslogtreecommitdiffstats
path: root/Modules/_tkinter.c
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-06-06 14:01:28 (GMT)
committerGitHub <noreply@github.com>2023-06-06 14:01:28 (GMT)
commit27cbeb08b80138d093b9b08eb41744d249c386e6 (patch)
tree446e26ff7553f14f4ea21e0e9b75195a348a44c6 /Modules/_tkinter.c
parent82ab13c49a77b0d73e6cd5c7ecfe0de1b1036819 (diff)
downloadcpython-27cbeb08b80138d093b9b08eb41744d249c386e6.zip
cpython-27cbeb08b80138d093b9b08eb41744d249c386e6.tar.gz
cpython-27cbeb08b80138d093b9b08eb41744d249c386e6.tar.bz2
[3.12] gh-104399: Use newer libtommath APIs when necessary (GH-104407) (#105343)
gh-104399: Use newer libtommath APIs when necessary (GH-104407) (cherry picked from commit 00d73caf804c0474980e471347d6385757af975f) Co-authored-by: Christopher Chavez <chrischavez@gmx.us>
Diffstat (limited to 'Modules/_tkinter.c')
-rw-r--r--Modules/_tkinter.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 49c9444..15f9c04 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -65,6 +65,12 @@ Copyright (C) 1994 Steen Lumholt.
#endif
#include <tclTomMath.h>
+#if defined(TCL_WITH_EXTERNAL_TOMMATH) || (TK_HEX_VERSION >= 0x08070000)
+#define USE_DEPRECATED_TOMMATH_API 0
+#else
+#define USE_DEPRECATED_TOMMATH_API 1
+#endif
+
#if !(defined(MS_WINDOWS) || defined(__CYGWIN__))
#define HAVE_CREATEFILEHANDLER
#endif
@@ -1053,20 +1059,33 @@ static PyObject*
fromBignumObj(TkappObject *tkapp, Tcl_Obj *value)
{
mp_int bigValue;
+ mp_err err;
+#if USE_DEPRECATED_TOMMATH_API
unsigned long numBytes;
+#else
+ size_t numBytes;
+#endif
unsigned char *bytes;
PyObject *res;
if (Tcl_GetBignumFromObj(Tkapp_Interp(tkapp), value, &bigValue) != TCL_OK)
return Tkinter_Error(tkapp);
+#if USE_DEPRECATED_TOMMATH_API
numBytes = mp_unsigned_bin_size(&bigValue);
+#else
+ numBytes = mp_ubin_size(&bigValue);
+#endif
bytes = PyMem_Malloc(numBytes);
if (bytes == NULL) {
mp_clear(&bigValue);
return PyErr_NoMemory();
}
- if (mp_to_unsigned_bin_n(&bigValue, bytes,
- &numBytes) != MP_OKAY) {
+#if USE_DEPRECATED_TOMMATH_API
+ err = mp_to_unsigned_bin_n(&bigValue, bytes, &numBytes);
+#else
+ err = mp_to_ubin(&bigValue, bytes, numBytes, NULL);
+#endif
+ if (err != MP_OKAY) {
mp_clear(&bigValue);
PyMem_Free(bytes);
return PyErr_NoMemory();