[Koha-patches] [PATCH] Bug 5914 : BuildUnimarcHierarchies : Fixing infinite loop

Chris Cormack chrisc at catalyst.net.nz
Mon Mar 21 03:52:59 CET 2011


From: Henri-Damien LAURENT <henridamien.laurent at biblibre.com>

When referenced authority in 5XX$3 would be the same as the current authid, the script would get into infinite loop
---
 C4/AuthoritiesMarc.pm |   45 +++++++++++++++++++++++----------------------
 1 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm
index f3cc948..c23196c 100644
--- a/C4/AuthoritiesMarc.pm
+++ b/C4/AuthoritiesMarc.pm
@@ -1128,28 +1128,29 @@ sub BuildUnimarcHierarchies{
   } else {
     my $record = GetAuthority($authid);
     my $found;
-	if ($record){
-		foreach my $field ($record->field('550')){
-		  if ($field->subfield('5') && $field->subfield('5') eq 'g'){
-			my $parentrecord = GetAuthority($field->subfield('3'));
-			my $localresult=$hierarchies;
-			my $trees;
-			$trees = BuildUnimarcHierarchies($field->subfield('3'));
-			my @trees;
-			if ($trees=~/;/){
-			   @trees = split(/;/,$trees);
-			} else {
-			   push @trees, $trees;
-			}
-			foreach (@trees){
-			  $_.= ",$authid";
-			}
-			@globalresult = (@globalresult, at trees);
-			$found=1;
-		  }
-		  $hierarchies=join(";", at globalresult);
-		}
-	}
+    return unless $record;
+    foreach my $field ($record->field('5..')){
+      if ($field->subfield('5') && $field->subfield('5') eq 'g'){
+		my $subfauthid=_get_authid_subfield($field);
+        next if ($subfauthid eq $authid);
+        my $parentrecord = GetAuthority($subfauthid);
+        my $localresult=$hierarchies;
+        my $trees;
+        $trees = BuildUnimarcHierarchies($subfauthid);
+        my @trees;
+        if ($trees=~/;/){
+           @trees = split(/;/,$trees);
+        } else {
+           push @trees, $trees;
+        }
+        foreach (@trees){
+          $_.= ",$authid";
+        }
+        @globalresult = (@globalresult, at trees);
+        $found=1;
+      }
+      $hierarchies=join(";", at globalresult);
+    }
     #Unless there is no ancestor, I am alone.
     $hierarchies="$authid" unless ($hierarchies);
   }
-- 
1.7.1



More information about the Koha-patches mailing list