Sven M. Hallberg on Mon, Mar 20 2023:
> ** (process:72067): CRITICAL **: 01:07:35.544: eda_config_set_property:
> assertion '!eda_config_is_descendent (parent, config)' failed
> gaf(72067) in free(): bogus pointer (double free?) 0xdfdfdfdfdfdfdfdf
> Abort trap (core dumped)
> FAIL unit-tests/t0402-config.scm (exit status: 134)
Found it, patch below. On to the next one!
All the tests in gnetlist-legacy fail like this:
/usr/ports/pobj/geda-gaf-1.10.2/geda-gaf-1.10.2/gnetlist-legacy/src/gnetlist-legacy
-g stack_1-geda
/usr/ports/pobj/geda-gaf-1.10.2/geda-gaf-1.10.2/gnetlist-legacy/tests/stack_1-geda.sch
Loading schematic
[/usr/ports/pobj/geda-gaf-1.10.2/geda-gaf-1.10.2/gnetlist-legacy/tests/stack_1-geda.sch]
ERROR: Failed to load
'/usr/ports/pobj/geda-gaf-1.10.2/geda-gaf-1.10.2/gnetlist-legacy/tests/stack_1-geda.sch':
Cannot find file
/usr/ports/pobj/geda-gaf-1.10.2/geda-gaf-1.10.2/gnetlist-legacy/tests/stack_1-geda.sch:
No such file or directory
...
Indeed, gnetlist-legacy/tests/stack_1-geda.sch does not exist; the file
is called stack_1.sch. No idea, what's going on here. Makefile.am says:
input_files = \
stack_1.sch \
...
TESTS = stack_1-geda.out \
...
What gives?
-p
PS: I'm not subscribed to ports, so please Cc replies, thx. :)
Index: cad/geda-gaf/patches/patch-libgeda_src_scheme_config_c
===================================================================
RCS file: cad/geda-gaf/patches/patch-libgeda_src_scheme_config_c
diff -N cad/geda-gaf/patches/patch-libgeda_src_scheme_config_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ cad/geda-gaf/patches/patch-libgeda_src_scheme_config_c 20 Mar 2023
12:32:59 -0000
@@ -0,0 +1,22 @@
+g_strfreev expects its argument to be a NULL-terminated array of pointers.
+
+Index: libgeda/src/scheme_config.c
+--- libgeda/src/scheme_config.c.orig
++++ libgeda/src/scheme_config.c
+@@ -961,7 +961,7 @@ SCM_DEFINE (set_config_x, "%set-config!", 4, 0, 0,
+ int i = 0;
+
+ if (scm_is_string (first_s)) {
+- gchar **value = g_new0 (gchar *, len);
++ gchar **value = g_new0 (gchar *, len + 1);
+ scm_dynwind_unwind_handler ((void (*)(void *)) g_strfreev, value,
+ SCM_F_WIND_EXPLICITLY);
+ for (curr_s = value_s; !scm_is_null (curr_s); curr_s = scm_cdr
(curr_s)) {
+@@ -969,6 +969,7 @@ SCM_DEFINE (set_config_x, "%set-config!", 4, 0, 0,
+ value [i++] = g_strdup (tmp);
+ free (tmp);
+ }
++ value [i] = NULL; /* null-terminate for
g_strfreev */
+ eda_config_set_string_list (cfg, group, key,
+ (const gchar * const *) value, len);
+