summaryrefslogtreecommitdiff
path: root/universal_parser.c
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2024-02-08 10:43:50 -0500
committerPeter Zhu <[email protected]>2024-02-13 11:05:56 -0500
commita71d1ed83875600c174e66a8ace18e0ad451958a (patch)
tree1afb3c02d9144c14ab580a1f4f727e8c9f9c9927 /universal_parser.c
parente4272fd292e7a432150e90c8dc7d8e9aa7d07e62 (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.c4
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