From 54887cd6a4427183a18d605b97acf29a347ed5dc Mon Sep 17 00:00:00 2001
From: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Date: Thu, 15 Mar 2018 12:37:11 +0100
Subject: [PATCH] Bug 20422: Fix warning on uri_escape_utf8 in Output.pm
When opac-details calls parametrized_url, it triggers an uninitialized
warning when you would have a record without e.g. author, like:
Use of uninitialized value in subroutine entry at /usr/share/perl5/URI/Escape.pm line 184.
This is (imo) actually a bug in URI::Escape; it should check its args.
But we resolve the warning here by adding the "// q{}" in parametrized_url.
NOTE: Along the way we do something similar in the arrParamsBusc loop.
If the variable is undefined, jump to the next one. (Consistent with the
approach in the if-part preceding it.)
Test plan:
[1] Run t/Output.t again. Should pass now.
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Brendan Gallagher <brendan@bywatersolutions.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
---
C4/Output.pm | 4 ++--
opac/opac-detail.pl | 1 +
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/C4/Output.pm b/C4/Output.pm
index 1b3ee48..39d9f9c 100644
--- a/C4/Output.pm
+++ b/C4/Output.pm
@@ -351,10 +351,10 @@ sub parametrized_url {
my $vars = shift || {}; # ie { LANG => en }
my $ret = $url;
while ( my ($key,$val) = each %$vars) {
- my $val_url = URI::Escape::uri_escape_utf8($val);
+ my $val_url = URI::Escape::uri_escape_utf8( $val // q{} );
$ret =~ s/\{$key\}/$val_url/g;
}
- $ret =~ s/\{[^\{]*\}//g; # remove not defined vars
+ $ret =~ s/\{[^\{]*\}//g; # remove remaining vars
return $ret;
}
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index 088039a..ff53871 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -200,6 +200,7 @@ if ($session->param('busc')) {
}
} else {
for my $value (@{$arrParamsBusc->{$_}}) {
+ next if !defined($value);
$pasarParams .= '&' if ($j);
$pasarParams .= $_ . '=' . Encode::decode('UTF-8', uri_escape_utf8($value));
$j++;
--
2.1.4