On Sun, Feb 08, 2026 at 11:56:42AM +0000, Gavin Smith wrote:
> 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:
I think the first patch I sent is incomplete and won't work, here's
a fuller version:
diff --git a/tta/C/convert/build_html_perl_state.c
b/tta/C/convert/build_html_perl_state.c
index ccc7663c50..3328225f91 100644
--- a/tta/C/convert/build_html_perl_state.c
+++ b/tta/C/convert/build_html_perl_state.c
@@ -43,6 +43,7 @@
/* for html_conversion_context_type_names */
#include "html_converter_types.h"
#include "build_html_perl_state.h"
+#include "xs_utils.h"
/* See the NOTE in build_perl_info.c on use of functions related to
memory allocation */
@@ -184,17 +185,17 @@ build_html_translated_names (HV *converter_hv, CONVERTER
*converter)
&status, 0, &iconv_status);
if (!iconv_status)
{
- free (encoded_lang);
- encoded_lang = strdup (documentlanguage);
+ non_perl_free (encoded_lang);
+ encoded_lang = non_perl_strdup (documentlanguage);
}
}
else
- encoded_lang = strdup (documentlanguage);
+ encoded_lang = non_perl_strdup (documentlanguage);
}
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)