From 9dbb0e8b5ba20aaaf281290fd78c4dbb110071cc Mon Sep 17 00:00:00 2001 From: mbeauchamp Date: Mon, 9 Mar 2026 14:41:38 +0000 Subject: [PATCH 1/3] swig generates scope braces around the declaration of "temp" var, but reader destroy is called immediately after the close brace with &temp causing a core dump in Release build under gcc 13. Moving outside of if ($input) expands scope to entire swig function avoiding issue --- modules/python/nitf/source/nitro.i | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/python/nitf/source/nitro.i b/modules/python/nitf/source/nitro.i index 41a16aac7..95c29de5d 100644 --- a/modules/python/nitf/source/nitro.i +++ b/modules/python/nitf/source/nitro.i @@ -65,93 +65,93 @@ * Setup some typemaps for the destructors */ %typemap(in) nitf_DataSource**{ + nitf_DataSource* temp = 0; if ($input) { - nitf_DataSource* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp, $descriptor(nitf_DataSource *), 0 | 0 ) != -1 && temp) $1 = (nitf_DataSource**)&temp; } } %typemap(in) nitf_Writer**{ + nitf_Writer* temp = 0; if ($input) { - nitf_Writer* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_Writer*), 0 | 0 ) != -1 && temp) $1 = (nitf_Writer**)&temp; } } %typemap(in) nitf_ImageWriter**{ + nitf_ImageWriter* temp = 0; if ($input) { - nitf_ImageWriter* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_ImageWriter*), 0 | 0 ) != -1 && temp) $1 = (nitf_ImageWriter**)&temp; } } %typemap(in) nitf_ImageSource**{ + nitf_ImageSource* temp = 0; if ($input) { - nitf_ImageSource* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_ImageSource*), 0 | 0 ) != -1 && temp) $1 = (nitf_ImageSource**)&temp; } } %typemap(in) nitf_ImageReader**{ + nitf_ImageReader* temp = 0; if ($input) { - nitf_ImageReader* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_ImageReader*), 0 | 0 ) != -1 && temp) $1 = (nitf_ImageReader**)&temp; } } %typemap(in) nitf_Reader**{ + nitf_Reader* temp = 0; if ($input) { - nitf_Reader* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_Reader*), 0 | 0 ) != -1 && temp) $1 = (nitf_Reader**)&temp; } } %typemap(in) nitf_DownSampler**{ + nitf_DownSampler* temp = 0; if ($input) { - nitf_DownSampler* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_DownSampler*), 0 | 0 ) != -1 && temp) $1 = (nitf_DownSampler**)&temp; } } %typemap(in) nitf_Record**{ + nitf_Record* temp = 0; if ($input) { - nitf_Record* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_Record*), 0 | 0 ) != -1 && temp) $1 = (nitf_Record**)&temp; } } %typemap(in) nitf_TREEnumerator**{ + nitf_TREEnumerator* temp = 0; if ($input) { - nitf_TREEnumerator* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_TREEnumerator*), 0 | 0 ) != -1 && temp) $1 = (nitf_TREEnumerator**)&temp; } } %typemap(in) nitf_SegmentReader**{ + nitf_SegmentReader* temp = 0; if ($input) { - nitf_SegmentReader* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_SegmentReader*), 0 | 0 ) != -1 && temp) $1 = (nitf_SegmentReader**)&temp; } } %typemap(in) nitf_SegmentSource**{ + nitf_SegmentSource* temp = 0; if ($input) { - nitf_SegmentSource* temp = 0; if (SWIG_ConvertPtr($input, (void**)&temp,$descriptor(nitf_SegmentSource*), 0 | 0 ) != -1 && temp) $1 = (nitf_SegmentSource**)&temp; } From 12e4cc47ea6b8f79b3a431c385c8c1a08c6dd136 Mon Sep 17 00:00:00 2001 From: mbeauchamp Date: Mon, 9 Mar 2026 14:42:52 +0000 Subject: [PATCH 2/3] check that reader is not null before deref or it will in fact "dump core" --- modules/c/nitf/source/NitfReader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/c/nitf/source/NitfReader.c b/modules/c/nitf/source/NitfReader.c index 513c8ef39..eb7347cf4 100644 --- a/modules/c/nitf/source/NitfReader.c +++ b/modules/c/nitf/source/NitfReader.c @@ -466,7 +466,7 @@ NITFAPI(void) nitf_Reader_destruct(nitf_Reader** reader) { /* If the reader has already been destructed, or was never */ /* Inited, dont dump core */ - if (*reader) + if (reader && *reader) { nitf_ListIterator iter; nitf_ListIterator end; From 42bc12e0d4307de1aa6c34b6c6746a727068ae1f Mon Sep 17 00:00:00 2001 From: mbeauchamp Date: Mon, 9 Mar 2026 14:48:11 +0000 Subject: [PATCH 3/3] platform.linux_distribution() is deprecated in py 3.8+, change to distro for drop-in replacement --- .regenerate_python_bindings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.regenerate_python_bindings.py b/.regenerate_python_bindings.py index faa3c0b09..023a22c78 100644 --- a/.regenerate_python_bindings.py +++ b/.regenerate_python_bindings.py @@ -1,7 +1,7 @@ from subprocess import check_output, check_call, DEVNULL import os import sys -from platform import dist +import distro from sys import stdout from threading import Timer, Event import itertools, sys @@ -20,9 +20,9 @@ def thought(): def linux_version(): - distro, version, _ = dist() - maj_version = version.split(".")[0] - return distro, maj_version + linux_distro = distro.name() + maj_version = distro.major_version() + return linux_distro, maj_version def swig_version():