Bug 36791: Koha explodes when trying to edit an authority rec. with an invalid authid

When trying to open the authority editor with authid=<invalid_authid>
(e.g. a deleted authid) Koha explodes with a message:
Can't call method "authtypecode" on an undefined value at
/kohadevbox/koha/authorities/authorities.pl line 556

This this because authtypecode method is called on the result of
->find without verifying that it was succesful.

Test plan:
==========
1. Try to edit an auth rec. giving as a authid (in URL) a non-existing
   authid, e.g. in ktd, with standard ktd test data:
   http://your_ktd:8081/cgi-bin/koha/authorities/authorities.pl?authid=100000
   Koha should explode with the message:
   Can't call method "authtypecode" on an undefined value at
   /kohadevbox/koha/authorities/authorities.pl line 556
2. Apply the patch; restart_all.
3. Repeat p. 1.  You should get the 404 error page.

Sponsored-by: Ignatianum University in Cracow
Signed-off-by: Roman Dolny <roman.dolny@jezuici.pl>
Signed-off-by: Emily Lamancusa <emily.lamancusa@montgomerycountymd.gov>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
(cherry picked from commit 18843cabdb)
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
(cherry picked from commit b9ba92c153)
Signed-off-by: Lucas Gass <lucas@bywatersolutions.com>
This commit is contained in:
Janusz Kaczmarek 2024-05-06 11:44:26 +00:00 committed by Lucas Gass
parent 04126b54eb
commit 823360f3b0

View file

@ -547,11 +547,15 @@ my $changed_authtype = $input->param('changed_authtype') // q{};
my $dbh = C4::Context->dbh; my $dbh = C4::Context->dbh;
my $authobj = Koha::Authorities->find($authid);
if ( defined $authid && !$authid || $authid && !$authobj ) {
print $input->redirect("/cgi-bin/koha/errors/404.pl"); # escape early
exit;
}
if(!$authtypecode) { if(!$authtypecode) {
$authtypecode = $authid ? Koha::Authorities->find($authid)->authtypecode : ''; $authtypecode = $authid ? $authobj->authtypecode : '';
} }
my $authobj = Koha::Authorities->find($authid);
my $count = $authobj ? $authobj->get_usage_count : 0; my $count = $authobj ? $authobj->get_usage_count : 0;
my ($template, $loggedinuser, $cookie) my ($template, $loggedinuser, $cookie)