GraphicsMagick: Add a Add a TclMagick test program. Memory leak...

GraphicsMagick Commits <[email protected]> Tue, 24 Sep 2024 10:48:49 -0500
Newsgroups gmane.comp.video.graphicsmagick.cvs
Message-ID <mailman.23653.1727192944.7833.graphicsmagick-commit@lists.sourceforge.net>
changeset d275416799ad in /hg/GraphicsMagick
details: http://hg.GraphicsMagick.org/hg/GraphicsMagick?cmd=changeset;node=d275416799ad
summary: Add a Add a TclMagick test program.  Memory leak fixes.  'make test' does something.

diffstat:

 ChangeLog                              |   14 ++++
 TclMagick/Makefile.am                  |   18 ++++-
 TclMagick/Makefile.in                  |  107 ++++++++++++++++++++++++--------
 TclMagick/generic/TclMagick.c          |   19 +++--
 TclMagick/generic/TclMagick.h          |    8 ++-
 TclMagick/generic/TclMagickAppInit.c   |    2 +
 TclMagick/generic/libttkcommon.c       |    1 -
 TclMagick/tests/test-draw.tcl          |    2 +
 TclMagick/tests/test-wand.tcl          |    2 +
 VisualMagick/installer/inc/version.isx |    4 +-
 magick/version.h                       |    4 +-
 www/ChangeLog.html                     |   12 +++
 12 files changed, 149 insertions(+), 44 deletions(-)

diffs (463 lines):

diff -r 377926dd1d12 -r d275416799ad ChangeLog
--- a/ChangeLog	Fri Sep 20 12:20:09 2024 -0500
+++ b/ChangeLog	Tue Sep 24 10:48:24 2024 -0500
@@ -1,3 +1,17 @@
+2024-09-24  Bob Friesenhahn  <[email protected]>
+
+	* TclMagick/Makefile.am: 'make test' does something.  Not yet what
+	it should be.
+
+	* TclMagick/tests/test-wand.tcl: Fix memork leak of $img and $seq.
+
+	* TclMagick/tests/test-draw.tcl: Fix memory leak of $img.
+
+	* generic/TclMagickAppInit.c: Add a TclMagick test program.
+
+	* TclMagick/generic/TkMagick.c: Fix memory leak of 'fonts' and
+	'formats' lists members.
+
 2024-09-20  Bob Friesenhahn  <[email protected]>
 
 	* TclMagick/Makefile.am: Now uses non-recursive build and produces
diff -r 377926dd1d12 -r d275416799ad TclMagick/Makefile.am
--- a/TclMagick/Makefile.am	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/Makefile.am	Tue Sep 24 10:48:24 2024 -0500
@@ -35,6 +35,15 @@
 generic_TkMagick_la_LIBADD = @TCL_STUB_LIB_SPEC@ @TK_STUB_LIB_SPEC@ @TCL_LIBS@ @TK_LIBS@ @GM_LIBS@ generic/libttkcommon.la
 generic_TkMagick_la_CPPFLAGS = -Igeneric/ @TCL_INCLUDES@ @GM_CPPFLAGS@ @TK_INCLUDES@ @TK_XINCLUDES@
 
+# A TclMagick executable (not installed)
+generic_PGMS = generic/TclMagick
+generic_TclMagick_SOURCES = generic/TclMagickAppInit.c
+generic_TclMagick_CPPFLAGS = -Igeneric/ @TCL_INCLUDES@ @GM_CPPFLAGS@
+generic_TclMagick_LDADD = $(generic_lib_magick_LTLIBRARIES) @TCL_STUB_LIB_SPEC@ @TK_STUB_LIB_SPEC@ @TCL_LIB_SPEC@ @TK_LIB_SPEC@ @TCL_LIB_FLAG@ @TK_LIB_FLAG@ @TCL_LIBS@ @TK_LIBS@ @GM_LIBS@
+
+noinst_PROGRAMS = \
+	$(generic_PGMS)
+
 CLEANFILES = generic/pkgIndex.tcl
 
 
@@ -46,9 +55,12 @@
 	rm -v $(DESTDIR)@libdir@/TclMagick@VERSION@/pkgIndex.tcl
 
 test:
-	cd generic && $(TCLSH) `@CYGPATH@ $(srcdir)/tests/test-wand.tcl` $(TESTFLAGS) \
-		-load "package ifneeded $(PACKAGE_NAME)3 $(PACKAGE_VERSION) \
-			[list load `@CYGPATH@ $(PKG_LIB_FILE)` [string totitle $(PACKAGE_NAME)3]]"
+	cd $(abs_srcdir)/generic && $(abs_builddir)/generic/TclMagick $(abs_srcdir)/tests/test-wand.tcl
+
+#test:
+#	cd generic && $(TCLSH) `@CYGPATH@ $(srcdir)/tests/test-wand.tcl` $(TESTFLAGS) \
+#		-load "package ifneeded $(PACKAGE_NAME) $(PACKAGE_VERSION) \
+#			[list load `@CYGPATH@ $(PKG_LIB_FILE)` [string totitle $(PACKAGE_NAME)]]"
 
 # Run Clang analyzer on the project.
 # In order for this to work, you must have first installed the 'clang'
diff -r 377926dd1d12 -r d275416799ad TclMagick/Makefile.in
--- a/TclMagick/Makefile.in	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/Makefile.in	Tue Sep 24 10:48:24 2024 -0500
@@ -19,6 +19,7 @@
 # Copyright David N. Welton <[email protected]>, 2004, with many
 # thanks to Bob Friesenhahn for all the help.
 
+
 VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -93,6 +94,7 @@
 POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
+noinst_PROGRAMS = $(am__EXEEXT_1)
 subdir = .
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/unix/m4/libtool.m4 \
@@ -111,6 +113,8 @@
 CONFIG_HEADER = $(top_builddir)/generic/config.h
 CONFIG_CLEAN_FILES = generic/pkgIndex.tcl
 CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 = generic/TclMagick$(EXEEXT)
+PROGRAMS = $(noinst_PROGRAMS)
 am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
 am__vpath_adj = case $$p in \
     $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@@ -168,6 +172,10 @@
 	$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
 	$(AM_CFLAGS) $(CFLAGS) $(generic_libttkcommon_la_LDFLAGS) \
 	$(LDFLAGS) -o $@
+am_generic_TclMagick_OBJECTS =  \
+	generic/TclMagick-TclMagickAppInit.$(OBJEXT)
+generic_TclMagick_OBJECTS = $(am_generic_TclMagick_OBJECTS)
+generic_TclMagick_DEPENDENCIES = $(generic_lib_magick_LTLIBRARIES)
 AM_V_P = $(am__v_P_@AM_V@)
 am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
 am__v_P_0 = false
@@ -183,7 +191,8 @@
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/generic
 depcomp = $(SHELL) $(top_srcdir)/unix/config/depcomp
 am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo \
+am__depfiles_remade = generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Po \
+	generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo \
 	generic/$(DEPDIR)/TkMagick_la-TkMagick.Plo \
 	generic/$(DEPDIR)/libttkcommon_la-libttkcommon.Plo
 am__mv = mv -f
@@ -207,10 +216,12 @@
 am__v_CCLD_1 = 
 SOURCES = $(generic_TclMagick_la_SOURCES) \
 	$(generic_TkMagick_la_SOURCES) \
-	$(generic_libttkcommon_la_SOURCES)
+	$(generic_libttkcommon_la_SOURCES) \
+	$(generic_TclMagick_SOURCES)
 DIST_SOURCES = $(generic_TclMagick_la_SOURCES) \
 	$(generic_TkMagick_la_SOURCES) \
-	$(generic_libttkcommon_la_SOURCES)
+	$(generic_libttkcommon_la_SOURCES) \
+	$(generic_TclMagick_SOURCES)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -484,6 +495,12 @@
 generic_TkMagick_la_LDFLAGS = @GM_LDFLAGS@ -L$(generic_lib_magickdir) -no-undefined -module
 generic_TkMagick_la_LIBADD = @TCL_STUB_LIB_SPEC@ @TK_STUB_LIB_SPEC@ @TCL_LIBS@ @TK_LIBS@ @GM_LIBS@ generic/libttkcommon.la
 generic_TkMagick_la_CPPFLAGS = -Igeneric/ @TCL_INCLUDES@ @GM_CPPFLAGS@ @TK_INCLUDES@ @TK_XINCLUDES@
+
+# A TclMagick executable (not installed)
+generic_PGMS = generic/TclMagick
+generic_TclMagick_SOURCES = generic/TclMagickAppInit.c
+generic_TclMagick_CPPFLAGS = -Igeneric/ @TCL_INCLUDES@ @GM_CPPFLAGS@
+generic_TclMagick_LDADD = $(generic_lib_magick_LTLIBRARIES) @TCL_STUB_LIB_SPEC@ @TK_STUB_LIB_SPEC@ @TCL_LIB_SPEC@ @TK_LIB_SPEC@ @TCL_LIB_FLAG@ @TK_LIB_FLAG@ @TCL_LIBS@ @TK_LIBS@ @GM_LIBS@
 all: all-am
 
 .SUFFIXES:
@@ -539,6 +556,15 @@
 generic/pkgIndex.tcl: $(top_builddir)/config.status $(top_srcdir)/generic/pkgIndex.tcl.in
 	cd $(top_builddir) && $(SHELL) ./config.status $@
 
+clean-noinstPROGRAMS:
+	@list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+	echo " rm -f" $$list; \
+	rm -f $$list || exit $$?; \
+	test -n "$(EXEEXT)" || exit 0; \
+	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+	echo " rm -f" $$list; \
+	rm -f $$list
+
 install-generic_lib_magickLTLIBRARIES: $(generic_lib_magick_LTLIBRARIES)
 	@$(NORMAL_INSTALL)
 	@list='$(generic_lib_magick_LTLIBRARIES)'; test -n "$(generic_lib_magickdir)" || list=; \
@@ -594,6 +620,12 @@
 
 generic/libttkcommon.la: $(generic_libttkcommon_la_OBJECTS) $(generic_libttkcommon_la_DEPENDENCIES) $(EXTRA_generic_libttkcommon_la_DEPENDENCIES) generic/$(am__dirstamp)
 	$(AM_V_CCLD)$(generic_libttkcommon_la_LINK) -rpath $(generic_lib_magickdir) $(generic_libttkcommon_la_OBJECTS) $(generic_libttkcommon_la_LIBADD) $(LIBS)
+generic/TclMagick-TclMagickAppInit.$(OBJEXT): generic/$(am__dirstamp) \
+	generic/$(DEPDIR)/$(am__dirstamp)
+
+generic/TclMagick$(EXEEXT): $(generic_TclMagick_OBJECTS) $(generic_TclMagick_DEPENDENCIES) $(EXTRA_generic_TclMagick_DEPENDENCIES) generic/$(am__dirstamp)
+	@rm -f generic/TclMagick$(EXEEXT)
+	$(AM_V_CCLD)$(LINK) $(generic_TclMagick_OBJECTS) $(generic_TclMagick_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
@@ -603,6 +635,7 @@
 distclean-compile:
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Po@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/TkMagick_la-TkMagick.Plo@am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@generic/$(DEPDIR)/libttkcommon_la-libttkcommon.Plo@am__quote@ # am--include-marker
@@ -658,6 +691,20 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generic_libttkcommon_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o generic/libttkcommon_la-libttkcommon.lo `test -f 'generic/libttkcommon.c' || echo '$(srcdir)/'`generic/libttkcommon.c
 
+generic/TclMagick-TclMagickAppInit.o: generic/TclMagickAppInit.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generic_TclMagick_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT generic/TclMagick-TclMagickAppInit.o -MD -MP -MF generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Tpo -c -o generic/TclMagick-TclMagickAppInit.o `test -f 'generic/TclMagickAppInit.c' || echo '$(srcdir)/'`generic/TclMagickAppInit.c
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Tpo generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='generic/TclMagickAppInit.c' object='generic/TclMagick-TclMagickAppInit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generic_TclMagick_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o generic/TclMagick-TclMagickAppInit.o `test -f 'generic/TclMagickAppInit.c' || echo '$(srcdir)/'`generic/TclMagickAppInit.c
+
+generic/TclMagick-TclMagickAppInit.obj: generic/TclMagickAppInit.c
+@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generic_TclMagick_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT generic/TclMagick-TclMagickAppInit.obj -MD -MP -MF generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Tpo -c -o generic/TclMagick-TclMagickAppInit.obj `if test -f 'generic/TclMagickAppInit.c'; then $(CYGPATH_W) 'generic/TclMagickAppInit.c'; else $(CYGPATH_W) '$(srcdir)/generic/TclMagickAppInit.c'; fi`
+@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Tpo generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='generic/TclMagickAppInit.c' object='generic/TclMagick-TclMagickAppInit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(generic_TclMagick_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o generic/TclMagick-TclMagickAppInit.obj `if test -f 'generic/TclMagickAppInit.c'; then $(CYGPATH_W) 'generic/TclMagickAppInit.c'; else $(CYGPATH_W) '$(srcdir)/generic/TclMagickAppInit.c'; fi`
+
 mostlyclean-libtool:
 	-rm -f *.lo
 
@@ -898,7 +945,7 @@
 	       exit 1; } >&2
 check-am: all-am
 check: check-am
-all-am: Makefile $(LTLIBRARIES)
+all-am: Makefile $(PROGRAMS) $(LTLIBRARIES)
 installdirs:
 	for dir in "$(DESTDIR)$(generic_lib_magickdir)"; do \
 	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
@@ -939,11 +986,12 @@
 clean: clean-am
 
 clean-am: clean-generic clean-generic_lib_magickLTLIBRARIES \
-	clean-libtool mostlyclean-am
+	clean-libtool clean-noinstPROGRAMS mostlyclean-am
 
 distclean: distclean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-		-rm -f generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo
+		-rm -f generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Po
+	-rm -f generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo
 	-rm -f generic/$(DEPDIR)/TkMagick_la-TkMagick.Plo
 	-rm -f generic/$(DEPDIR)/libttkcommon_la-libttkcommon.Plo
 	-rm -f Makefile
@@ -994,7 +1042,8 @@
 maintainer-clean: maintainer-clean-am
 	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
 	-rm -rf $(top_srcdir)/autom4te.cache
-		-rm -f generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo
+		-rm -f generic/$(DEPDIR)/TclMagick-TclMagickAppInit.Po
+	-rm -f generic/$(DEPDIR)/TclMagick_la-TclMagick.Plo
 	-rm -f generic/$(DEPDIR)/TkMagick_la-TkMagick.Plo
 	-rm -f generic/$(DEPDIR)/libttkcommon_la-libttkcommon.Plo
 	-rm -f Makefile
@@ -1019,23 +1068,24 @@
 
 .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \
 	check-am clean clean-cscope clean-generic \
-	clean-generic_lib_magickLTLIBRARIES clean-libtool cscope \
-	cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
-	dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
-	dist-zstd distcheck distclean distclean-compile \
-	distclean-generic distclean-hdr distclean-libtool \
-	distclean-tags distcleancheck distdir distuninstallcheck dvi \
-	dvi-am html html-am info info-am install install-am \
-	install-data install-data-am install-data-local install-dvi \
-	install-dvi-am install-exec install-exec-am \
-	install-generic_lib_magickLTLIBRARIES install-html \
-	install-html-am install-info install-info-am install-man \
-	install-pdf install-pdf-am install-ps install-ps-am \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \
-	uninstall-generic_lib_magickLTLIBRARIES uninstall-local
+	clean-generic_lib_magickLTLIBRARIES clean-libtool \
+	clean-noinstPROGRAMS cscope cscopelist-am ctags ctags-am dist \
+	dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \
+	dist-xz dist-zip dist-zstd distcheck distclean \
+	distclean-compile distclean-generic distclean-hdr \
+	distclean-libtool distclean-tags distcleancheck distdir \
+	distuninstallcheck dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am \
+	install-data-local install-dvi install-dvi-am install-exec \
+	install-exec-am install-generic_lib_magickLTLIBRARIES \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-ps \
+	install-ps-am install-strip installcheck installcheck-am \
+	installdirs maintainer-clean maintainer-clean-generic \
+	mostlyclean mostlyclean-compile mostlyclean-generic \
+	mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \
+	uninstall-am uninstall-generic_lib_magickLTLIBRARIES \
+	uninstall-local
 
 .PRECIOUS: Makefile
 
@@ -1048,9 +1098,12 @@
 	rm -v $(DESTDIR)@libdir@/TclMagick@VERSION@/pkgIndex.tcl
 
 test:
-	cd generic && $(TCLSH) `@CYGPATH@ $(srcdir)/tests/test-wand.tcl` $(TESTFLAGS) \
-		-load "package ifneeded $(PACKAGE_NAME)3 $(PACKAGE_VERSION) \
-			[list load `@CYGPATH@ $(PKG_LIB_FILE)` [string totitle $(PACKAGE_NAME)3]]"
+	cd $(abs_srcdir)/generic && $(abs_builddir)/generic/TclMagick $(abs_srcdir)/tests/test-wand.tcl
+
+#test:
+#	cd generic && $(TCLSH) `@CYGPATH@ $(srcdir)/tests/test-wand.tcl` $(TESTFLAGS) \
+#		-load "package ifneeded $(PACKAGE_NAME) $(PACKAGE_VERSION) \
+#			[list load `@CYGPATH@ $(PKG_LIB_FILE)` [string totitle $(PACKAGE_NAME)]]"
 
 # Run Clang analyzer on the project.
 # In order for this to work, you must have first installed the 'clang'
diff -r 377926dd1d12 -r d275416799ad TclMagick/generic/TclMagick.c
--- a/TclMagick/generic/TclMagick.c	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/generic/TclMagick.c	Tue Sep 24 10:48:24 2024 -0500
@@ -207,7 +207,7 @@
     return (strlen(name) == 0);
 }
 
-
+#if 0
  /*----------------------------------------------------------------------
  * Find TclMagick objects
  *----------------------------------------------------------------------
@@ -229,6 +229,7 @@
         return mPtr;
     }
 }
+#endif
 
 /*----------------------------------------------------------------------
  * encoding functions
@@ -461,11 +462,12 @@
             for( i=0; i < listLen; i++ ) {
                 Tcl_ListObjAppendElement(interp, listPtr,
                                          Tcl_NewStringObj(fonts[i], (int)strlen(fonts[i])) );
+                MagickRelinquishMemory(fonts[i]); /* Free individual font entry */
             }
             Tcl_SetObjResult(interp, listPtr);
         }
         if (fonts != NULL)
-            MagickRelinquishMemory(fonts); /* Free TclMagick resource */
+            MagickRelinquishMemory(fonts); /* Free fonts list */
 
         break;
     }
@@ -476,7 +478,7 @@
         unsigned long   listLen = 0;
         Tcl_Obj        *listPtr;
         char           *pattern = "*";
-        char          **fonts;
+        char          **formats;
 
         if( objc > 3 ) {
             Tcl_WrongNumArgs(interp, 2, objv, "?pattern?");
@@ -486,17 +488,18 @@
             pattern = Tcl_GetString(objv[2]);
         }
 
-        fonts = MagickQueryFormats(pattern, &listLen);
-        if( (fonts != NULL) && (listLen > 0) ) {
+        formats = MagickQueryFormats(pattern, &listLen);
+        if( (formats != NULL) && (listLen > 0) ) {
             listPtr = Tcl_NewListObj(0, NULL);
             for( i=0; i < listLen; i++ ) {
                 Tcl_ListObjAppendElement(interp, listPtr,
-                                         Tcl_NewStringObj(fonts[i], (int)strlen(fonts[i])) );
+                                         Tcl_NewStringObj(formats[i], (int)strlen(formats[i])) );
+                MagickRelinquishMemory(formats[i]);
             }
             Tcl_SetObjResult(interp, listPtr);
         }
-        if (fonts != NULL)
-            MagickRelinquishMemory(fonts); /* Free TclMagick resource */
+        if (formats != NULL)
+            MagickRelinquishMemory(formats); /* Free TclMagick resource */
 
         break;
     }
diff -r 377926dd1d12 -r d275416799ad TclMagick/generic/TclMagick.h
--- a/TclMagick/generic/TclMagick.h	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/generic/TclMagick.h	Tue Sep 24 10:48:24 2024 -0500
@@ -51,8 +51,14 @@
 #   define EXPORT(a,b) a b
 #endif
 
+#endif
 
-#endif
+/* Export Tclmagick_Init() for static linkage */
+extern int Tclmagick_Init(Tcl_Interp *interp);
+
+/* Export Tclmagick_SafeInit for static linkage */
+extern int Tclmagick_SafeInit(Tcl_Interp *interp);
+
 /* vim: set ts=8 sts=8 sw=8 noet: */
 /*
  * Local Variables:
diff -r 377926dd1d12 -r d275416799ad TclMagick/generic/TclMagickAppInit.c
--- a/TclMagick/generic/TclMagickAppInit.c	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/generic/TclMagickAppInit.c	Tue Sep 24 10:48:24 2024 -0500
@@ -36,6 +36,8 @@
 extern void             XtToolkitInitialize _ANSI_ARGS_((void));
 extern int              Tclxttest_Init _ANSI_ARGS_((Tcl_Interp *interp));
 #endif
+
+#include "TclMagick.h"
 
 /*
  *----------------------------------------------------------------------
diff -r 377926dd1d12 -r d275416799ad TclMagick/generic/libttkcommon.c
--- a/TclMagick/generic/libttkcommon.c	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/generic/libttkcommon.c	Tue Sep 24 10:48:24 2024 -0500
@@ -1,7 +1,6 @@
 /*
  * tcltkcommon.c: data and functions shared by TclMagick.c TkMagick.c
  */
-
 #include "libttkcommon.h"
 #include "TclMagick.h"
 
diff -r 377926dd1d12 -r d275416799ad TclMagick/tests/test-draw.tcl
--- a/TclMagick/tests/test-draw.tcl	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/tests/test-draw.tcl	Tue Sep 24 10:48:24 2024 -0500
@@ -258,6 +258,8 @@
     }
 }
 
+magick delete $img
+
 puts "##### DRAW TEST READY #####"
 if {!$ERRORS} {
     after 3000 exit
diff -r 377926dd1d12 -r d275416799ad TclMagick/tests/test-wand.tcl
--- a/TclMagick/tests/test-wand.tcl	Fri Sep 20 12:20:09 2024 -0500
+++ b/TclMagick/tests/test-wand.tcl	Tue Sep 24 10:48:24 2024 -0500
@@ -1530,6 +1530,8 @@
     }
 }
 
+magick delete $img $seq
+
 puts "*********** READY **************"
 if {$SKIPPED} {
     puts [format "tested=%d errors=%d skipped=%d" $TESTED $ERRORS $SKIPPED]
diff -r 377926dd1d12 -r d275416799ad VisualMagick/installer/inc/version.isx
--- a/VisualMagick/installer/inc/version.isx	Fri Sep 20 12:20:09 2024 -0500
+++ b/VisualMagick/installer/inc/version.isx	Tue Sep 24 10:48:24 2024 -0500
@@ -10,5 +10,5 @@
 
 #define public MagickPackageName "GraphicsMagick"
 #define public MagickPackageVersion "1.4"
-#define public MagickPackageVersionAddendum ".020240920"
-#define public MagickPackageReleaseDate "snapshot-20240920"
+#define public MagickPackageVersionAddendum ".020240924"
+#define public MagickPackageReleaseDate "snapshot-20240924"
diff -r 377926dd1d12 -r d275416799ad magick/version.h
--- a/magick/version.h	Fri Sep 20 12:20:09 2024 -0500
+++ b/magick/version.h	Tue Sep 24 10:48:24 2024 -0500
@@ -38,8 +38,8 @@
 #define MagickLibVersion  0x282502
 #define MagickLibVersionText  "1.4"
 #define MagickLibVersionNumber 28,25,2
-#define MagickChangeDate   "20240920"
-#define MagickReleaseDate  "snapshot-20240920"
+#define MagickChangeDate   "20240924"
+#define MagickReleaseDate  "snapshot-20240924"
 
 /*
   The MagickLibInterfaceNewest and MagickLibInterfaceOldest defines
diff -r 377926dd1d12 -r d275416799ad www/ChangeLog.html
--- a/www/ChangeLog.html	Fri Sep 20 12:20:09 2024 -0500
+++ b/www/ChangeLog.html	Tue Sep 24 10:48:24 2024 -0500
@@ -38,6 +38,18 @@
 
 <main id="graphicsmagick-changelog">
 <h1 class="title">GraphicsMagick ChangeLog</h1>
+<p>2024-09-24  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
+<blockquote>
+<ul class="simple">
+<li><p>TclMagick/Makefile.am: 'make test' does something.  Not yet what
+it should be.</p></li>
+<li><p>TclMagick/tests/test-wand.tcl: Fix memork leak of $img and $seq.</p></li>
+<li><p>TclMagick/tests/test-draw.tcl: Fix memory leak of $img.</p></li>
+<li><p>generic/TclMagickAppInit.c: Add a TclMagick test program.</p></li>
+<li><p>TclMagick/generic/TkMagick.c: Fix memory leak of 'fonts' and
+'formats' lists members.</p></li>
+</ul>
+</blockquote>
 <p>2024-09-20  Bob Friesenhahn  &lt;<a class="reference external" href="mailto:bfriesen&#37;&#52;&#48;simple&#46;dallas&#46;tx&#46;us">bfriesen<span>&#64;</span>simple<span>&#46;</span>dallas<span>&#46;</span>tx<span>&#46;</span>us</a>&gt;</p>
 <blockquote>
 <ul class="simple">