On Sun, Feb 08, 2026 at 12:45:26PM +0200, Eli Zaretskii wrote:
> > From: Gavin Smith <[email protected]>
> > Date: Fri, 6 Feb 2026 17:32:16 +0000
> > Cc: [email protected]
> > 
> > The next pretest distribution for the next Texinfo release (7.3) has been
> > uploaded to
> > 
> > https://alpha.gnu.org/gnu/texinfo/texinfo-7.2.91.tar.xz
> 
> Testing the MinGW build mostly succeeds, but there are some failures:
> 
>      FAIL: test_scripts/formatting_documentlanguage_cmdline.sh
>      FAIL: test_scripts/formatting_cpp_lines.sh
> 
>      FAIL: test_scripts/layout_formatting_fr.sh
>      FAIL: test_scripts/layout_formatting_fr_icons.sh
> 
>      FAIL: different_languages_gen_master_menu.sh
> 

All of these tests use @documentlanguage, and you did not report them
to fail for texinfo-7.2.90.  Hence, it is likely that the failure is
due to a change to @documentlanguage that took place since that pretest.

I remember that Patrice made changes to process accented characters in
the argument to @documentlanguage (this was an attempt to fix a bug
report, although as I remember, the actual bug was something else.)

So commit 4df3c1805 (2026-01-26) is suspect.  It is a rather large
commit, with 48 altered files.

2026-01-26 Patrice Dumas  <[email protected]>

        * tta/C/main/utils.c (encode_with_iconv, encode_string): replace the
        silent integer argument by a status argument, such that, if set, the
        function is silent and the information that there was an error in
        encoding is returned.

        * tta/C/convert/get_converter_perl_info.c
        (copy_sv_options_for_convert_text), tta/C/main/build_perl_info.c
        (build_convert_text_options), tta/C/main/convert_to_text.c
        (destroy_text_options, copy_options_for_convert_text),
        tta/C/main/convert_to_text.h (TEXT_OPTIONS),
        tta/perl/Texinfo/Convert/Text.pm (copy_options_for_convert_text): add
        COMMAND_LINE_ENCODING to text options.

        * tta/perl/Texinfo/Convert/Text.pm (_convert),
        tta/perl/Texinfo/Convert/Utils.pm (switch_lang_translations)
        (definition_category_tree), tta/perl/Texinfo/Transformations.pm
        (complete_tree_nodes_menus_in_document, regenerate_master_menu),
        tta/perl/Texinfo/Translations.pm (new_lang_translation): add
        new_lang_translation in Perl too, and use it to initialize lang
        translations arrays.  In addition to hiding to some extent the
        implementation details, it allows to mark in the code where the
        lang translations are initialized.

        * tta/C/convert/build_html_perl_state.c
        (switch_perl_lang_translations, build_html_translated_names),
        tta/C/main/convert_utils.c (definition_category_tree),
        tta/C/main/translations.c (new_lang_translation, get_lang_translation),
        tta/C/main/tree_types.h (LANG_TRANSLATION), tta/C/parsetexi/indices.c
        (complete_indices), tta/C/tree_elements/get_perl_tree_elements.c
        (get_lang_translations_sv), tta/perl/Texinfo/Convert/Utils.pm
        (switch_lang_translations, definition_category_tree),
        tta/perl/Texinfo/Translations.pm (translate_string)
        (cache_translate_string, complete_indices): pass COMMAND_LINE_ENCODING
        trought to new_lang_translation.  In new_lang_translation encode lang
        and pass it in lang translations objects.  Use the encoded lang in
        translate_string to set environment varibles, as should be.

        * tta/tests/Makefile.onetst, tta/tests/other/Makefile.am (EXTRA_DIST),
        tta/tests/other/list-of-tests
        (accented_lang_index_collation_documentlanguage_collation),
        tta/tests/other/accented_lang_index_collation.texi: new test of
        DOCUMENTLANGUAGE_COLLATION set with @documentlanguage with non-ascii
        non-latin1 characters.


I have looked through the patch although have a limited understanding of
what it does.  The following chunk looks suspect:

--- a/tta/C/convert/build_html_perl_state.c
+++ b/tta/C/convert/build_html_perl_state.c
@@ -158,7 +165,30 @@ build_html_translated_names (HV *converter_hv, CONVERTER 
*converter)
                 strlen ("documentlanguage"), documentlanguage_sv, 0);
     }
 
-  switch_perl_lang_translations (converter_hv, documentlanguage);
+  if (documentlanguage)
+    {
+      if (command_line_encoding)
+        {
+          int status;
+          int iconv_status = 0;
+
+          /* cast to drop const */
+          encoded_lang = encode_string ((char *)documentlanguage,
+                                        command_line_encoding,
+                                        &status, 0, &iconv_status);
+          if (!iconv_status)
+            {
+              free (encoded_lang);
+              encoded_lang = strdup (documentlanguage);
+            }
+        }
+      else
+        encoded_lang = strdup (documentlanguage);
+    }
+  switch_perl_lang_translations (converter_hv, documentlanguage,
+                                 encoded_lang);
+
+  free (encoded_lang);
 


'encode_string' is in C/main/utils.c, which does not include the Perl
headers.  Hence its return value should be allocated with the default
libc allocator.  However, it is passed to 'free' in build_html_perl_state.c,
which is a file which does include the Perl headers, and hence this
will likely be a version of 'free' that uses the Perl allocator.

So the first change I would try making would be the following:

diff --git a/tta/C/convert/build_html_perl_state.c 
b/tta/C/convert/build_html_perl_state.c
index ccc7663c50..b61df218a9 100644
--- a/tta/C/convert/build_html_perl_state.c
+++ b/tta/C/convert/build_html_perl_state.c
@@ -184,7 +184,7 @@ build_html_translated_names (HV *converter_hv, CONVERTER 
*converter)
                                         &status, 0, &iconv_status);
           if (!iconv_status)
             {
-              free (encoded_lang);
+              non_perl_free (encoded_lang);
               encoded_lang = strdup (documentlanguage);
             }
         }
@@ -194,7 +194,7 @@ build_html_translated_names (HV *converter_hv, CONVERTER 
*converter)
   switch_perl_lang_translations (converter_hv, documentlanguage,
                                  encoded_lang);
 
-  free (encoded_lang);
+  non_perl_free (encoded_lang);
 
   /* pass all the information for each context for translated commands */
   if (converter->no_arg_formatted_cmd_translated.number)

If that doesn't work, hopefully Patrice will have a better idea.



> All of them seem to be caused by the same problem with memory
> allocation, the log/output files all have an error message like this:
> 
>   Free to wrong pool 132cd60 not 8d019700 at ./..//perl/texi2any.pl line 2154.
> 
> This means memory allocated via Perl is freed by a direct call to
> 'free', or the other way around: memory allocated by a direct call to
> malloc is freed via Perl.
> 
> All of the error messages point to the same line 2154 in texi2any.pl.
> 
> Let me know if I can provide more information to help debug this.
> 
> All the other tests in all the other directories all succeed.

Reply via email to