https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=43330

            Bug ID: 43330
           Summary: C4::Tags fails to compile when TagsExternalDictionary
                    is configured
   Initiative type: ---
        Sponsorship ---
            status:
           Product: Koha
           Version: 25.11
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P5 - low
         Component: Architecture, internals, and plumbing
          Assignee: [email protected]
          Reporter: [email protected]
        QA Contact: [email protected]
  Target Milestone: ---

When the TagsExternalDictionary system preference contains a value, C4::Tags
fails to compile with:

    Undefined subroutine &C4::Tags::check_install called at C4/Tags.pm line 44.

This can cause HTTP 500 errors throughout the staff interface on pages which
load C4::Tags, including the staff home page, catalog detail pages, and Tools.

Observed on Koha 25.11.06.

The problem appears to be caused by the order in which check_install is
imported in C4/Tags.pm.

Currently C4/Tags.pm contains:

    use Modern::Perl;
    use base 'Exporter';
    use C4::Context;

    BEGIN {
        ...
        my $ext_dict = C4::Context->preference('TagsExternalDictionary');

        if ( $ext_dict && !check_install( module => 'Lingua::Ispell' ) ) {
            warn "Ignoring TagsExternalDictionary, because Lingua::Ispell is
not installed.";
            $ext_dict = q{};
        }

        ...
    }

but Module::Load::Conditional is loaded later:

    use Module::Load::Conditional qw( check_install );

Because the check occurs inside a BEGIN block, the BEGIN block is executed
during compilation before Perl reaches the later `use
Module::Load::Conditional` statement.

As a result, when TagsExternalDictionary has a non-empty value, Perl attempts
to call check_install() before that function has been imported.

When TagsExternalDictionary is empty, the problem is hidden because this
expression short-circuits:

    $ext_dict && !check_install(...)

so check_install() is never called.


To recreate:

1. Set the TagsExternalDictionary system preference to a non-empty value, for
example:

       /usr/bin/ispell

2. Restart Plack if necessary.

3. Visit a staff interface page which loads C4::Tags, such as the staff home
page or a bibliographic detail page.

OR reproduce directly from the command line:

       perl -MC4::Tags -e 'print "C4::Tags loaded OK\n"'

4. Observe:

       Undefined subroutine &C4::Tags::check_install called at C4/Tags.pm line
44.
       BEGIN failed--compilation aborted at C4/Tags.pm line 53.
       Compilation failed in require.
       BEGIN failed--compilation aborted.

5. Clear TagsExternalDictionary and clear/update the system preference cache.

6. Run the same command again.

7. C4::Tags loads successfully.

-- 
You are receiving this mail because:
You are the assignee for the bug.
You are watching all bug changes.
_______________________________________________
Koha-bugs mailing list -- [email protected]
To unsubscribe send an email to [email protected]
website : http://www.koha-community.org/
git : http://git.koha-community.org/
bugs : http://bugs.koha-community.org/

Reply via email to