SQL-Injection vermeiden. Fix für Revisionen 2936, 2937.
[kivitendo-erp.git] / SL / LXDebug.pm
index 684a1e7..185297b 100644 (file)
@@ -1,13 +1,14 @@
 package LXDebug;
 
-use constant NONE               => 0;
-use constant INFO               => 1;
-use constant DEBUG1             => 2;
-use constant DEBUG2             => 4;
-use constant QUERY              => 8;
-use constant TRACE              => 16;
-use constant BACKTRACE_ON_ERROR => 32;
-use constant ALL                => 63;
+use constant NONE               =>  0;
+use constant INFO               =>  1;
+use constant DEBUG1             =>  1 << 1;
+use constant DEBUG2             =>  1 << 2;
+use constant QUERY              =>  1 << 3;
+use constant TRACE              =>  1 << 4;
+use constant BACKTRACE_ON_ERROR =>  1 << 5;
+use constant ALL                => (1 << 6) - 1;
+use constant DEVEL              => INFO | QUERY | TRACE | BACKTRACE_ON_ERROR;
 
 use constant FILE_TARGET   => 0;
 use constant STDERR_TARGET => 1;
@@ -130,6 +131,14 @@ sub dump {
     my $dumper = Data::Dumper->new([$variable]);
     $dumper->Sortkeys(1);
     $self->message($level, "dumping ${name}:\n" . $dumper->Dump());
+
+    # Data::Dumper does not reset the iterator belonging to this hash
+    # if 'Sortkeys' is true. Therefore clear the iterator manually.
+    # See "perldoc -f each".
+    if ($variable && ('HASH' eq ref $variable)) {
+      keys %{ $variable };
+    }
+
   } else {
     $self->message($level,
                    "dumping ${name}: Data::Dumper not available; "