https://bugs.gentoo.org/921302 https://github.com/NLnetLabs/ldns/pull/232 https://github.com/NLnetLabs/ldns/pull/233 From daf38095763f758c77be538da25c267dc5cb73c8 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 26 Jan 2024 11:30:39 +0100 Subject: [PATCH] SWIG_Python_str_AsChar removal in SWIG 4.2.0 The replacement, SWIG_PyUnicode_AsUTF8AndSize, has different memory management requirements. --- contrib/python/ldns_rdf.i | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/contrib/python/ldns_rdf.i b/contrib/python/ldns_rdf.i index 5d7448fd..60daf1a7 100644 --- a/contrib/python/ldns_rdf.i +++ b/contrib/python/ldns_rdf.i @@ -56,7 +56,11 @@ */ %typemap(arginit, noblock=1) const ldns_rdf * { +#if SWIG_VERSION >= 0x040200 + PyObject *$1_bytes = NULL; +#else char *$1_str = NULL; +#endif } /* @@ -66,11 +70,17 @@ %typemap(in, noblock=1) const ldns_rdf * (void* argp, $1_ltype tmp = 0, int res) { if (Python_str_Check($input)) { + const char *argstr; +#if SWIG_VERSION >= 0x040200 + argstr = SWIG_PyUnicode_AsUTF8AndSize($input, NULL, &$1_bytes); +#else $1_str = SWIG_Python_str_AsChar($input); - if ($1_str == NULL) { + argstr = $1_str; +#endif + if (argstr == NULL) { %argument_fail(SWIG_TypeError, "char *", $symname, $argnum); } - tmp = ldns_dname_new_frm_str($1_str); + tmp = ldns_dname_new_frm_str(argstr); if (tmp == NULL) { %argument_fail(SWIG_TypeError, "char *", $symname, $argnum); } @@ -90,10 +100,17 @@ */ %typemap(freearg, noblock=1) const ldns_rdf * { +#if SWIG_VERSION >= 0x040200 + if ($1_bytes != NULL) { + /* Is not NULL only when a conversion form string occurred. */ + Py_XDECREF($1_bytes); + } +#else if ($1_str != NULL) { /* Is not NULL only when a conversion form string occurred. */ SWIG_Python_str_DelForPy3($1_str); /* Is a empty macro for Python < 3. */ } +#endif } %nodefaultctor ldns_struct_rdf; /* No default constructor. */ From f91f61e10be595a6a46845112aaed7da24551bf9 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Fri, 26 Jan 2024 11:57:03 +0100 Subject: [PATCH] 32-bit compatibility for Python SWIG bindings The ssize_t type can be int instead of long, and the pointer types are incompatible. --- contrib/python/ldns.i | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/python/ldns.i b/contrib/python/ldns.i index 881ba5e85..b4a740820 100644 --- a/contrib/python/ldns.i +++ b/contrib/python/ldns.i @@ -99,12 +99,14 @@ %typemap(in, noblock=1) (ssize_t) { int $1_res = 0; - $1_res = SWIG_AsVal_long($input, &$1); + long val; + $1_res = SWIG_AsVal_long($input, &val); if (!SWIG_IsOK($1_res)) { SWIG_exception_fail(SWIG_ArgError($1_res), "in method '" "$symname" "', argument " "$argnum" " of type '" "$type""'"); } + $1 = val; }