From: Galen Charlton Date: Tue, 19 Aug 2014 20:19:20 +0000 (-0700) Subject: LP#1358916: refuse to retrieve over-large MARC records via Z39.50 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=1708f88f5f87bf895469725d631192239e22fd58;p=evergreen%2Fmasslnc.git LP#1358916: refuse to retrieve over-large MARC records via Z39.50 At least one malformed record discovered in the wild can cause open-ils.search backends to balloon to over 3G of memory consumption. This patch works around that by refusing to process any (MARC) Z39.50 results that are larger than the MARC record maximum of 99,999 octets. Signed-off-by: Galen Charlton Signed-off-by: Ben Shum --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Z3950.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Z3950.pm index c830844577..a5a4f6c9c4 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Z3950.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Z3950.pm @@ -462,7 +462,13 @@ sub process_results { my $rec = $results->record($_); if ($tformat eq 'usmarc') { - $marc = MARC::Record->new_from_usmarc($rec->raw()); + my $raw = $rec->raw(); + if (length($raw) <= 99999) { + $marc = MARC::Record->new_from_usmarc($raw); + } else { + $marcs = ''; + die "ISO2709 record is too large to process"; + } } elsif ($tformat eq 'xml') { $marc = MARC::Record->new_from_xml($rec->raw()); } else {