From b1dcccec2ad21cfe5fde474c62051ff6252236d0 Mon Sep 17 00:00:00 2001 From: Michael Houghton Date: Thu, 23 Apr 2015 18:37:22 -0400 Subject: [PATCH 1/3] Modified HTTP::Message::new to check $content to see if it is a ref. If it is a ref, dereference it before doing utf8::downgrade on it. This addresses issue #13 in GitHub --- Changes | 7 +++++++ lib/HTTP/Message.pm | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Changes b/Changes index 7e3349be..ab80ac65 100644 --- a/Changes +++ b/Changes @@ -1,3 +1,10 @@ +Michael Houghton (1): + Modified HTTP::Message::new to check $content to see if it is a ref. + If it is a ref, dereference it before doing utf8::downgrade on it. + This addresses issue #13 in GitHub + +_______________________________________________________________________________ +2015-04-23 HTTP-Message 6.07 Added support for is_client_error, is_server_error to HTTP::Response (Karen Etheridge) diff --git a/lib/HTTP/Message.pm b/lib/HTTP/Message.pm index 37ce2772..37d7e3a0 100644 --- a/lib/HTTP/Message.pm +++ b/lib/HTTP/Message.pm @@ -2,7 +2,7 @@ package HTTP::Message; use strict; use vars qw($VERSION $AUTOLOAD); -$VERSION = "6.06"; +$VERSION = "6.07"; require HTTP::Headers; require Carp; @@ -43,7 +43,10 @@ sub new $header = HTTP::Headers->new; } if (defined $content) { + # POD says "should be bytes", but tests also use refs + my $dcontent = ref($content) ? $$content : $content; _utf8_downgrade($content); + $content = $dcontent; } else { $content = ''; From 17ef2a4d277f407de8de04e68a9d942e9ce5756e Mon Sep 17 00:00:00 2001 From: Michael Houghton Date: Sun, 31 May 2015 13:37:07 -0400 Subject: [PATCH 2/3] Modified HTTP::Message::new to correctly handle content when it is a ref, addressing Github issue #13 --- Changes | 2 +- lib/HTTP/Message.pm | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Changes b/Changes index ab80ac65..df3dfdf2 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,6 @@ Michael Houghton (1): Modified HTTP::Message::new to check $content to see if it is a ref. - If it is a ref, dereference it before doing utf8::downgrade on it. + Use the content_ref method to add $content in properly if it is a ref. This addresses issue #13 in GitHub _______________________________________________________________________________ diff --git a/lib/HTTP/Message.pm b/lib/HTTP/Message.pm index 37d7e3a0..a9d83a6f 100644 --- a/lib/HTTP/Message.pm +++ b/lib/HTTP/Message.pm @@ -2,7 +2,7 @@ package HTTP::Message; use strict; use vars qw($VERSION $AUTOLOAD); -$VERSION = "6.07"; +$VERSION = "6.06"; require HTTP::Headers; require Carp; @@ -43,19 +43,22 @@ sub new $header = HTTP::Headers->new; } if (defined $content) { - # POD says "should be bytes", but tests also use refs - my $dcontent = ref($content) ? $$content : $content; _utf8_downgrade($content); - $content = $dcontent; } else { $content = ''; } - bless { + my $self = bless { '_headers' => $header, '_content' => $content, }, $class; + + # docs say content should be bytes, but refs are OK + # the code above does not downgrade a ref properly, so this will do the trick + $self->content_ref($content) if (ref($content)); + + return $self; } From 2786b963b889f5aa298af616404434a349b862cf Mon Sep 17 00:00:00 2001 From: Michael Houghton Date: Sun, 31 May 2015 18:02:51 -0400 Subject: [PATCH 3/3] Added test to t/message.t prove t/message.t t/message.t .. 1/131 # Test 131 got: (t/message.t at line 500) t/message.t .. Failed 1/131 subtests Test Summary Report ------------------- t/message.t (Wstat: 0 Tests: 131 Failed: 1) Failed test: 131 Files=1, Tests=131, 0 wallclock secs ( 0.02 usr 0.00 sys + 0.09 cusr 0.00 csys = 0.11 CPU) Result: FAIL prove -b t/message.t t/message.t .. ok All tests successful. Files=1, Tests=131, 1 wallclock secs ( 0.03 usr 0.01 sys + 0.09 cusr 0.00 csys = 0.13 CPU) Result: PASS --- Changes | 1 + t/message.t | 8 +++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/Changes b/Changes index df3dfdf2..59ca5862 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,7 @@ Michael Houghton (1): Modified HTTP::Message::new to check $content to see if it is a ref. Use the content_ref method to add $content in properly if it is a ref. This addresses issue #13 in GitHub + Test added to t/message.t that fails in 6.06 _______________________________________________________________________________ 2015-04-23 HTTP-Message 6.07 diff --git a/t/message.t b/t/message.t index 3182b765..17ff3270 100644 --- a/t/message.t +++ b/t/message.t @@ -3,7 +3,7 @@ use strict; use Test qw(plan ok skip); -plan tests => 129; +plan tests => 131; require HTTP::Message; use Config qw(%Config); @@ -492,3 +492,9 @@ else { # test decoding of XML content $m = HTTP::Message->new(["Content-Type", "application/xml"], "\xFF\xFE<\0?\0x\0m\0l\0 \0v\0e\0r\0s\0i\0o\0n\0=\0\"\x001\0.\x000\0\"\0 \0e\0n\0c\0o\0d\0i\0n\0g\0=\0\"\0U\0T\0F\0-\x001\x006\0l\0e\0\"\0?\0>\0\n\0<\0r\0o\0o\0t\0>\0\xC9\0r\0i\0c\0<\0/\0r\0o\0o\0t\0>\0\n\0"); ok($m->decoded_content, "\n\xC9ric\n"); + +# +$foo = "фу"; # Cyrillic "foo" +$m = HTTP::Message->new(undef, \$foo); +ok($m->content, "фу"); +ok($m->decoded_content, "фу"); \ No newline at end of file