about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2009-08-30 22:27:26 -0700
committerEric Wong <normalperson@yhbt.net>2009-09-01 11:30:31 -0700
commitc9f68fc6294a59c31728bab9e01350c4b271fe30 (patch)
tree8932e18bf8e8c1c07161c08f9405ebf142ff873d
parenta6e410b7f85f22e6adbc55eb9dd3a494ca7200b2 (diff)
downloadclogger-c9f68fc6294a59c31728bab9e01350c4b271fe30.tar.gz
The pure variant was using lower-case output instead
of upper case, the ext variant was actually fine in this
case.  This is for nginx output format compatibility.
-rw-r--r--lib/clogger/pure.rb2
-rw-r--r--test/test_clogger.rb12
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/clogger/pure.rb b/lib/clogger/pure.rb
index 0a7aa24..ebbb1d6 100644
--- a/lib/clogger/pure.rb
+++ b/lib/clogger/pure.rb
@@ -62,7 +62,7 @@ private
   def byte_xs(s)
     s = s.dup
     s.force_encoding(Encoding::BINARY) if defined?(Encoding::BINARY)
-    s.gsub!(/(['"\x00-\x1f])/) { |x| "\\x#{$1.unpack('H2').first}" }
+    s.gsub!(/(['"\x00-\x1f])/) { |x| "\\x#{$1.unpack('H2').first.upcase}" }
     s
   end
 
diff --git a/test/test_clogger.rb b/test/test_clogger.rb
index 9cb494a..5e85e15 100644
--- a/test/test_clogger.rb
+++ b/test/test_clogger.rb
@@ -333,6 +333,18 @@ class TestClogger < Test::Unit::TestCase
     assert_equal expect, str.string
   end
 
+  # rack allows repeated headers with "\n":
+  # { 'Set-Cookie' => "a\nb" } =>
+  #   Set-Cookie: a
+  #   Set-Cookie: b
+  def test_escape_header_newlines
+    str = StringIO.new
+    app = lambda { |env| [302, { 'Set-Cookie' => "a\nb" }, [] ] }
+    cl = Clogger.new(app, :logger => str, :format => '$sent_http_set_cookie')
+    cl.call(@req)
+    assert_equal "a\\x0Ab\n", str.string
+  end
+
   def test_request_uri_fallback
     str = StringIO.new
     app = lambda { |env| [ 200, {}, [] ] }