Bug 19439: Remove eval with exit statements from opac/unapi
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Mon, 9 Oct 2017 13:12:05 +0000 (15:12 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 11 Dec 2017 14:34:24 +0000 (11:34 -0300)
The script contains some error responses that get lost when using them
in an eval statement. (Since exit should not be used within an eval
construction.) The eval is removed now.

Test plan:
[1] Before applying this patch, you could look at the current responses
    from unapi for the calls in the next steps. Apply the patch now.
[2] Call http(s)://[your-server]/cgi-bin/koha/unapi with only a format
    parameter.
    Check if you have a 400 status response. (In Firefox, look at Network
    tab of Developer Tools.)
    Note: Have to admit (reluctantly) that MS Edge shows the status code in
    the browser rightaway in contrast with Firefox.
[3] Call unapi with a format=marcxml&id=999
    The wrong id parameter should trigger a 404 response.
[4] Call unapi with format=marcxml&id=koha:biblionumber:[notexist]
    where notexist is a biblionumber that not exists.
    This should trigger again a 404 response.
[5] Call unapi with format=marcxmlx&id=koha:biblionumber:[exist]
    where exist should be a good biblionumber.
    The wrong format should trigger a 406 response.
[6] Bonus: The 500 response can be tested by manipulating a XSLT file.
    Create invalid xml in the file for marcxml (identity.xsl in intranet
    xslt folder).
    Call unapi with format=marcxml&id=koha:biblionumber:[exist].
    You should get a 500 response and have warnings in your logfile.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
opac/unapi

index d06fa44..b608210 100755 (executable)
@@ -129,7 +129,7 @@ if (not defined $format) {
         my $biblionumber = $1;
 
         my $content;
-        eval {
+
             my $marcxml = GetXmlBiblio($biblionumber);
             unless (defined $marcxml) {
                 # no bib, so 404
@@ -147,9 +147,9 @@ if (not defined $format) {
                 xml => $marcxml,
                 file => $xslt_file,
             });
-        };
-        if ($@) {
-            print $cgi->header( -status => '500 internal error ' . $@ );
+
+        if( !defined $content || $xslt_engine->err ) {
+            print $cgi->header( -status => '500 internal error' );
             exit 0;
         }