about summary refs log tree commit homepage
path: root/extras
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2013-11-11 03:31:33 +0000
committerEric Wong <e@80x24.org>2013-11-12 07:11:05 +0000
commit7dbf0de3f00d6400526f7742904d56cd5eb5629b (patch)
tree8c0c75080c50c0d7380335d09a29d0ccd83c2550 /extras
parent1d33205a7500f08c49e247af688877b0cc22cdfe (diff)
downloadyahns-7dbf0de3f00d6400526f7742904d56cd5eb5629b.tar.gz
In case we have bugs, this can help us find bugs in our code.
Diffstat (limited to 'extras')
-rw-r--r--extras/autoindex.rb9
-rw-r--r--extras/try_gzip_static.rb17
2 files changed, 17 insertions, 9 deletions
diff --git a/extras/autoindex.rb b/extras/autoindex.rb
index b868a5c..9ce6c61 100644
--- a/extras/autoindex.rb
+++ b/extras/autoindex.rb
@@ -112,15 +112,18 @@ class Autoindex
   rescue Errno::ENOENT, Errno::ENOTDIR # from Dir.open
     r(404)
   rescue => e
-    r(500, e.message, env)
+    r(500, e, env)
   ensure
     dir.close if dir
   end
 
   def r(code, msg = nil, env = nil)
-    if env && logger = env["rack.logger"]
+    if env && exc && logger = env["rack.logger"]
+      msg = exc.message
+      msg = msg.dump if /[[:cntrl:]]/ =~ msg # prevent code injection
       logger.warn("#{env['REQUEST_METHOD']} #{env['PATH_INFO']} " \
-                  "#{code} #{msg.inspect}")
+                  "#{code} #{msg}")
+      exc.backtrace.each { |line| logger.warn(line) }
     end
 
     if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include?(code)
diff --git a/extras/try_gzip_static.rb b/extras/try_gzip_static.rb
index 5e6a4e7..b65725a 100644
--- a/extras/try_gzip_static.rb
+++ b/extras/try_gzip_static.rb
@@ -96,7 +96,7 @@ class TryGzipStatic
     rescue Errno::EACCES
       r(403)
     rescue => e
-      r(500, e.message, env)
+      r(500, e, env)
     end
   end
 
@@ -127,7 +127,7 @@ class TryGzipStatic
         rescue Errno::ENOENT, Errno::EACCES
           head_no_gz(res, env, path, st)
         rescue => e
-          r(500, e.message, env)
+          r(500, e, env)
         end
       end
     else # 416, 304
@@ -189,13 +189,18 @@ class TryGzipStatic
   rescue Errno::EACCES # could get here from a race
     r(403)
   rescue => e
-    r(500, e.message, env)
+    r(500, e, env)
   end
 
-  def r(code, msg = nil, env = nil)
-    if env && logger = env["rack.logger"]
+  def r(code, exc = nil, env = nil)
+    if env && exc && logger = env["rack.logger"]
+      msg = exc.message if exc.respond_to?(:message)
+      msg = msg.dump if /[[:cntrl:]]/ =~ msg # prevent code injection
       logger.warn("#{env['REQUEST_METHOD']} #{env['PATH_INFO']} " \
-                  "#{code} #{msg.inspect}")
+                  "#{code} #{msg}")
+      if exc.respond_to?(:backtrace)
+        exc.backtrace.each { |line| logger.warn(line) }
+      end
     end
 
     if Rack::Utils::STATUS_WITH_NO_ENTITY_BODY.include?(code)