From 005de5d10f12056bbac46e2f482ff89085093f32 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 2 Mar 2017 14:24:17 +0100 Subject: [PATCH] Bug 18200: Fix a potential issue with preceding space in GetMarcUrls Content-Type: text/plain; charset=utf-8 Trims the URL in order prevent prefixing a space with http:// Normally you won't have a preceding space here, but I saw it happening one day and it does not cost much to resolve it. Bonus: Adding few simple tests in t/db_dependent/Biblio.t. Test plan: [1] Run t/db_dependent/Biblio.t [2] Add a 856$u with preceding space (MARC21) [3] Check opac-detail, Online access with OPACXSLTDetailsDisplay empty. Signed-off-by: Marcel de Rooy --- C4/Biblio.pm | 1 + t/db_dependent/Biblio.t | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index a780fd1..61216dc 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -2052,6 +2052,7 @@ sub GetMarcUrls { } my @urls = $field->subfield('u'); foreach my $url (@urls) { + $url =~ s/^\s+|\s+$//g; # trim my $marcurl; if ( $marcflavour eq 'MARC21' ) { my $s3 = $field->subfield('3'); diff --git a/t/db_dependent/Biblio.t b/t/db_dependent/Biblio.t index 48ed72f..ef050c3 100755 --- a/t/db_dependent/Biblio.t +++ b/t/db_dependent/Biblio.t @@ -272,6 +272,17 @@ sub run_tests { is( ( $marcflavour eq 'UNIMARC' && @$a2 == @$a1 + 1 ) || ( $marcflavour ne 'UNIMARC' && @$a2 == @$a1 + 3 ), 1, 'Check the number of returned notes of GetMarcNotes' ); + + # test for GetMarcUrls + $marc_record->append_fields( + MARC::Field->new( '856', '', '', u => ' https://koha-community.org ' ), + MARC::Field->new( '856', '', '', u => 'koha-community.org' ), + ); + my $marcurl = GetMarcUrls( $marc_record, $marcflavour ); + is( @$marcurl, 2, 'GetMarcUrls returns two URLs' ); + like( $marcurl->[0]->{MARCURL}, qr/^https/, 'GetMarcUrls did not stumble over a preceding space' ); + ok( $marcflavour ne 'MARC21' || $marcurl->[1]->{MARCURL} =~ /^http:\/\//, + 'GetMarcUrls prefixed a MARC21 URL with http://' ); } sub get_title_field { @@ -326,19 +337,19 @@ sub create_issn_field { } subtest 'MARC21' => sub { - plan tests => 31; + plan tests => 34; run_tests('MARC21'); $dbh->rollback; }; subtest 'UNIMARC' => sub { - plan tests => 31; + plan tests => 34; run_tests('UNIMARC'); $dbh->rollback; }; subtest 'NORMARC' => sub { - plan tests => 31; + plan tests => 34; run_tests('NORMARC'); $dbh->rollback; }; -- 2.1.4