diff options
author | Jeremy Evans <code@jeremyevans.net> | 2023-10-27 09:08:11 -0700 |
---|---|---|
committer | Kazuki Yamaguchi <k@rhe.jp> | 2024-05-01 01:54:09 +0900 |
commit | 27e11f2d1dcd2fd367a2ec271a715708de22b7b9 (patch) | |
tree | ffc0161e1e3fd6e5385985491fc8738a9b393219 | |
parent | 3bdde7d88dc12f8e25d42c100d4f5717b1e8853c (diff) | |
download | ruby-openssl-27e11f2d1dcd2fd367a2ec271a715708de22b7b9.tar.gz |
pkcs7: raise ArgumentError for PKCS7 with no content in PKCS7.new
Fixes [Bug #19974]
[pkuzco: expanded the fix for other content types]
[ky: adjusted formatting and the exception type]
Co-authored-by: pkuzco <b.naamneh@gmail.com>
Co-authored-by: Kazuki Yamaguchi <k@rhe.jp>
-rw-r--r-- | ext/openssl/ossl_pkcs7.c | 2 | ||||
-rw-r--r-- | test/openssl/test_pkcs7.rb | 5 |
2 files changed, 7 insertions, 0 deletions
diff --git a/ext/openssl/ossl_pkcs7.c b/ext/openssl/ossl_pkcs7.c index dbe53476..8d28f02f 100644 --- a/ext/openssl/ossl_pkcs7.c +++ b/ext/openssl/ossl_pkcs7.c @@ -346,6 +346,8 @@ ossl_pkcs7_initialize(int argc, VALUE *argv, VALUE self) BIO_free(in); if (!p7) ossl_raise(rb_eArgError, "Could not parse the PKCS7"); + if (!p7->d.ptr) + ossl_raise(rb_eArgError, "No content in PKCS7"); RTYPEDDATA_DATA(self) = p7; PKCS7_free(p7_orig); diff --git a/test/openssl/test_pkcs7.rb b/test/openssl/test_pkcs7.rb index ba8b93d0..fa15bdbc 100644 --- a/test/openssl/test_pkcs7.rb +++ b/test/openssl/test_pkcs7.rb @@ -155,6 +155,11 @@ class OpenSSL::TestPKCS7 < OpenSSL::TestCase assert_equal(data, p7.decrypt(@rsa1024)) end + def test_empty_signed_data_ruby_bug_19974 + data = "-----BEGIN PKCS7-----\nMAsGCSqGSIb3DQEHAg==\n-----END PKCS7-----\n" + assert_raise(ArgumentError) { OpenSSL::PKCS7.new(data) } + end + def test_graceful_parsing_failure #[ruby-core:43250] contents = File.read(__FILE__) assert_raise(ArgumentError) { OpenSSL::PKCS7.new(contents) } |