about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-11-05 02:11:03 +0000
committerEric Wong <normalperson@yhbt.net>2011-11-05 02:11:03 +0000
commitf057a82730d252c509f8c590430dbf4507d17601 (patch)
tree35c5bf005dc3b7c0d52a580ee7e94cd223090357
parent972bad366ae58ec726329a45cbf908e16e1889df (diff)
downloadmogilefs-client-f057a82730d252c509f8c590430dbf4507d17601.tar.gz
Otherwise IO#gets and MogileFS::Socket#timed_gets could
return a truncated response before EOF and we would never
know the response was truncated.
-rw-r--r--lib/mogilefs/backend.rb2
-rw-r--r--test/test_backend.rb9
2 files changed, 7 insertions, 4 deletions
diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb
index 973d82b..db13b45 100644
--- a/lib/mogilefs/backend.rb
+++ b/lib/mogilefs/backend.rb
@@ -207,7 +207,7 @@ class MogileFS::Backend
       raise error(@lasterr), @lasterrstr
     end
 
-    return url_decode($1) if line =~ /^OK\s+\d*\s*(\S*)/
+    return url_decode($1) if line =~ /^OK\s+\d*\s*(\S*)\r\n\z/
 
     raise MogileFS::InvalidResponseError,
           "Invalid response from server: #{line.inspect}"
diff --git a/test/test_backend.rb b/test/test_backend.rb
index 1a723de..6211b34 100644
--- a/test/test_backend.rb
+++ b/test/test_backend.rb
@@ -77,11 +77,11 @@ class TestBackend < Test::Unit::TestCase
 
   def test_parse_response
     assert_equal({'foo' => 'bar', 'baz' => 'hoge'},
-                 @backend.parse_response('OK 1 foo=bar&baz=hoge'))
+                 @backend.parse_response("OK 1 foo=bar&baz=hoge\r\n"))
 
     err = nil
     begin
-      @backend.parse_response('ERR you totally suck')
+      @backend.parse_response("ERR you totally suck\r\n")
     rescue MogileFS::Error => err
       assert_equal 'MogileFS::Backend::YouError', err.class.to_s
       assert_equal 'totally suck', err.message
@@ -94,6 +94,9 @@ class TestBackend < Test::Unit::TestCase
     assert_raises MogileFS::InvalidResponseError do
       @backend.parse_response 'garbage'
     end
+    assert_raises MogileFS::InvalidResponseError do
+      @backend.parse_response("OK 1 foo=bar&baz=hoge")
+    end
   end
 
   def test_parse_response_newline
@@ -142,7 +145,7 @@ class TestBackend < Test::Unit::TestCase
       t1.close
       thr = Thread.new do
         client = t2.accept
-        client.write("OK 1 foo=bar\n")
+        client.write("OK 1 foo=bar\r\n")
         client
       end
       rv = nil