From: Daniel Pittman <[email protected]>

We had a combination of bad logic, and bad testing, and a nasty behaviour of
Mocha <= 0.9.10 that would result in a false pass for one of our tests.

This not only falsely passed, but hid an infinite loop retrying decompression
on an invalid data stream; it could be triggered by anything that sent an HTTP
request with an invalid compressed body, resulting in a livelock.

Paired-with: Jesse Wolfe <[email protected]>
Signed-off-by: Daniel Pittman <[email protected]>
---
 lib/puppet/network/http/compression.rb     |    5 ++++-
 spec/unit/network/http/compression_spec.rb |    2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)
 mode change 100644 => 100755 spec/unit/network/http/compression_spec.rb

diff --git a/lib/puppet/network/http/compression.rb 
b/lib/puppet/network/http/compression.rb
index d9b56f1..c8d0011 100644
--- a/lib/puppet/network/http/compression.rb
+++ b/lib/puppet/network/http/compression.rb
@@ -75,7 +75,10 @@ module Puppet::Network::HTTP::Compression
         # in this case, we try with a verbatim (no header)
         # deflater.
         @uncompressor = Zlib::Inflate.new
-        retry if @first
+        if @first then
+          @first = false
+          retry
+        end
         raise
       end
 
diff --git a/spec/unit/network/http/compression_spec.rb 
b/spec/unit/network/http/compression_spec.rb
old mode 100644
new mode 100755
index c5bbbb0..3828ec5
--- a/spec/unit/network/http/compression_spec.rb
+++ b/spec/unit/network/http/compression_spec.rb
@@ -178,7 +178,7 @@ describe "http compression" do
       end
 
       it "should raise the error the second time" do
-        @inflater.expects(:inflate).raises(Zlib::DataError.new("not a zlib 
stream"))
+        @inflater.stubs(:inflate).raises(Zlib::DataError.new("not a zlib 
stream"))
         Zlib::Inflate.expects(:new).with.returns(@inflater)
         lambda { @adapter.uncompress("chunk") }.should raise_error
       end
-- 
1.7.4.1

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to