diff options
| author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-24 21:26:14 +0000 |
|---|---|---|
| committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-24 21:26:14 +0000 |
| commit | 2079b71000c709d239b58d21c2cfbff835b8d189 (patch) | |
| tree | a30429a345ab895a962d11c25438faf464378107 | |
| parent | daf14f713fdb2edc3572f4a73eab4bc97509f34f (diff) | |
string.c: fix String#crypt leak introduced in r58866
* string.c (rb_str_crypt): define LARGE_CRYPT_DATA when allocating
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
| -rw-r--r-- | string.c | 2 | ||||
| -rw-r--r-- | test/ruby/test_string.rb | 4 |
2 files changed, 5 insertions, 1 deletions
@@ -8727,7 +8727,7 @@ rb_str_crypt(VALUE str, VALUE salt) # if defined SIZEOF_CRYPT_DATA && SIZEOF_CRYPT_DATA <= 256 struct crypt_data cdata, *const data = &cdata; # else -# undef LARGE_CRYPT_DATA +# define LARGE_CRYPT_DATA struct crypt_data *data = ALLOC(struct crypt_data); # endif #else diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index 232d92b2a3..e28dca5012 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -546,6 +546,10 @@ CODE assert_raise(ArgumentError) {S("mypassword").crypt(S("aa".encode(enc)))} assert_raise(ArgumentError) {S("mypassword".encode(enc)).crypt(S("aa"))} end + + @cls == String and assert_no_memory_leak([], 's = ""', <<~'end;') # do + 1000.times { s.crypt(-"..").clear } + end; end def test_delete |
