summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/openssl/ossl_cipher.c3
-rw-r--r--test/openssl/test_cipher.rb5
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index bb9e40f11f..2796190be7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Oct 31 05:46:08 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * ext/openssl/ossl_cipher.c (ossl_cipher_update): input data must
+ not be empty. [ruby-talk:161220]
+
+ * test/openssl/test_cipher.rb: add test for Cipher#update("").
+
Mon Oct 31 05:38:26 2005 GOTOU Yuuzou <gotoyuzo@notwork.org>
* lib/webrick/httpservlet/cgihandler.rb
diff --git a/ext/openssl/ossl_cipher.c b/ext/openssl/ossl_cipher.c
index f90fb2477a..bc72d7e538 100644
--- a/ext/openssl/ossl_cipher.c
+++ b/ext/openssl/ossl_cipher.c
@@ -224,7 +224,8 @@ ossl_cipher_update(VALUE self, VALUE data)
StringValue(data);
in = RSTRING(data)->ptr;
- in_len = RSTRING(data)->len;
+ if ((in_len = RSTRING(data)->len) == 0)
+ rb_raise(rb_eArgError, "data must not be empty");
GetCipher(self, ctx);
str = rb_str_new(0, in_len+EVP_CIPHER_CTX_block_size(ctx));
if (!EVP_CipherUpdate(ctx, RSTRING(str)->ptr, &out_len, in, in_len))
diff --git a/test/openssl/test_cipher.rb b/test/openssl/test_cipher.rb
index 8711e46aa2..c84b47b7f4 100644
--- a/test/openssl/test_cipher.rb
+++ b/test/openssl/test_cipher.rb
@@ -57,6 +57,11 @@ class OpenSSL::TestCipher < Test::Unit::TestCase
s2 = @c1.update(@data) + @c1.final
assert_equal(s1, s2, "encrypt reset")
end
+
+ def test_empty_data
+ @c1.encrypt
+ assert_raises(ArgumentError){ @c1.update("") }
+ end
end
end