On Tue, Nov 08, 2022 at 11:30:30AM +0000, Werner LEMBERG wrote:
> 
> * Unpack the attached tarball and execute
> 
>   ```
>   LANG=C makeinfo changes.texi
>   ```
> 
>   It aborts with
> 
>   ```
>   Can't use an undefined value as an ARRAY reference at 
>   /usr/local/share/texinfo/Texinfo/Convert/Info.pm line 545.
>   ```
> 
>   returning error code 84.  This is a severe regression: My system
>   comes with `texi2any` version 6.5, which processes the input file
>   just fine.

It breaks with just the input

\input texinfo

@node Test Node
@chapter Test

foo

@image{lilypond/04/lily-2c932558,,,[image of music],}


@bye


The code that breaks is the following:

    if (defined($element->{'args'}->[4])
        and @{$element->{'args'}->[4]->{'contents'}}) {

The parse tree has for the @image command:

           {
              'cmdname' => 'image',
              'parent' => {},
              'source_info' => {
                'line_nr' => 8,
                'macro' => '',
                'file_name' => 'test.texi'
              },
              'args' => [
                {
                  'type' => 'brace_command_arg',
                  'contents' => [
                    {
                      'parent' => {},
                      'text' => 'lilypond/04/lily-2c932558'
                    }
                  ],
                  'parent' => {}
                },
                {
                  'type' => 'brace_command_arg',
                  'parent' => {}
                },
                {
                  'type' => 'brace_command_arg',
                  'parent' => {}
                },
                {
                  'type' => 'brace_command_arg',
                  'parent' => {},
                  'contents' => [
                    {
                      'parent' => {},
                      'text' => '[image of music]'
                    }
                  ]
                },
                {
                  'parent' => {},
                  'type' => 'brace_command_arg'
                }
              ],
              'extra' => {
                'input_perl_encoding' => 'utf-8'
              }
            },


I suspect this is related to the following change:

2022-09-17  Patrice Dumas  <pertu...@free.fr>

        ...

        * tp/Texinfo/XS/parsetexi/api.c (element_to_perl_hash): do not
        set 'contents' if empty.

I suspect at one time the contents should have been set to an empty
array, so that the code would have worked.  It would be easy
to add an extra check for the contents being defined, but I wonder
how much other code there is like this that could break.

Patrice, would you be able to look at this?


Reply via email to