diff options
author | Peter Zhu <[email protected]> | 2024-02-08 10:43:50 -0500 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2024-02-13 11:05:56 -0500 |
commit | a71d1ed83875600c174e66a8ace18e0ad451958a (patch) | |
tree | 1afb3c02d9144c14ab580a1f4f727e8c9f9c9927 /universal_parser.c | |
parent | e4272fd292e7a432150e90c8dc7d8e9aa7d07e62 (diff) |
Fix memory leak when parsing invalid hash symbol
For example:
10.times do
100_000.times do
eval('{"\xC3": 1}')
rescue EncodingError
end
puts `ps -o rss= -p #{$$}`
end
Before:
32032
48464
66112
84192
100592
117520
134096
150656
167168
183760
After:
17120
17120
17120
17120
18560
18560
18560
18560
18560
18560
Diffstat (limited to 'universal_parser.c')
-rw-r--r-- | universal_parser.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/universal_parser.c b/universal_parser.c index b670d0f4e3..0e7059638b 100644 --- a/universal_parser.c +++ b/universal_parser.c @@ -173,6 +173,7 @@ struct rb_imemo_tmpbuf_struct { #define ID2SYM p->config->id2sym #undef SYM2ID #define SYM2ID p->config->sym2id +#define rb_check_id_cstr p->config->check_id_cstr #define rb_str_catf p->config->str_catf #undef rb_str_cat_cstr @@ -191,10 +192,12 @@ struct rb_imemo_tmpbuf_struct { #define rb_str_new p->config->str_new #undef rb_str_new_cstr #define rb_str_new_cstr p->config->str_new_cstr +#define rb_setup_fake_str p->config->setup_fake_str #define rb_fstring p->config->fstring #define is_ascii_string p->config->is_ascii_string #define rb_enc_str_new p->config->enc_str_new #define rb_enc_str_buf_cat p->config->enc_str_buf_cat +#define rb_enc_str_coderange p->config->enc_str_coderange #define rb_str_buf_append p->config->str_buf_append #define rb_str_vcatf p->config->str_vcatf #undef StringValueCStr @@ -259,6 +262,7 @@ struct rb_imemo_tmpbuf_struct { #define ENCODING_SET p->config->encoding_set #define ENCODING_IS_ASCII8BIT p->config->encoding_is_ascii8bit #define rb_usascii_encoding p->config->usascii_encoding +#define ENC_CODERANGE_BROKEN p->config->enc_coderange_broken #define rb_ractor_make_shareable p->config->ractor_make_shareable |