Endlose Rekursionen via call_sub vermeiden.
authorMoritz Bunkus <m.bunkus@linet-services.de>
Tue, 12 Jan 2010 09:47:30 +0000 (10:47 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 28 Jun 2010 11:10:38 +0000 (13:10 +0200)
bin/mozilla/common.pl

index defa5f1..c8ab340 100644 (file)
@@ -9,6 +9,7 @@
 #
 ######################################################################
 
+use Carp;
 use SL::Common;
 use SL::DBUtils;
 use SL::Form;
@@ -508,6 +509,8 @@ sub show_history {
 
 # -------------------------------------------------------------------------
 
+my %_called_subs = ();
+
 sub call_sub {
   $main::lxdebug->enter_sub();
 
@@ -526,6 +529,9 @@ sub call_sub {
     $form->error(sprintf($locale->text("Attempt to call an undefined sub named '%s'"), $name));
   }
 
+  $_called_subs{$name}++;
+  confess "RECURSION DETECTION: call_sub($name) called " . $_called_subs{$name} . " time(s)" if $_called_subs{$name} > 10;
+
   {
     no strict "refs";
     &{ $name }(@_);