From c9f68fc6294a59c31728bab9e01350c4b271fe30 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 30 Aug 2009 22:27:26 -0700 Subject: Ensure hex escaping is done in uppercase 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. --- lib/clogger/pure.rb | 2 +- test/test_clogger.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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, {}, [] ] } -- cgit v1.2.3-24-ge0c7