diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ext/openssl/ossl_cipher.c | 3 | ||||
-rw-r--r-- | test/openssl/test_cipher.rb | 5 |
3 files changed, 14 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Mon Oct 31 05:49:23 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:37:20 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 cb5fee6aee..221588fdb9 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 |