summaryrefslogtreecommitdiff
path: root/parser_st.c
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2023-06-29 09:21:11 -0400
committerPeter Zhu <peter@peterzhu.ca>2023-06-29 11:16:50 -0400
commitf0d08d11dcd404f3146c0d71d6ff743bbc6e7193 (patch)
tree82e6bb0fff741e124915c7a2f6aabe54a484ee71 /parser_st.c
parentdf2b3a29987e9353596af76ed77f35d7366d654e (diff)
Fix memory leak when copying ST tables
st_copy allocates a st_table, which is not needed for hashes since it is allocated by VWA and embedded, so this causes a memory leak. The following script demonstrates the issue: ```ruby 20.times do 100_000.times do {a: 1, b: 2, c: 3, d: 4, e: 5, f: 6, g: 7, h: 8, i: 9} end puts `ps -o rss= -p #{$$}` end ```
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/8000
Diffstat (limited to 'parser_st.c')
-rw-r--r--parser_st.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/parser_st.c b/parser_st.c
index b2df6cbad2..5d3148bc0d 100644
--- a/parser_st.c
+++ b/parser_st.c
@@ -109,6 +109,8 @@ nonempty_memcpy(void *dest, const void *src, size_t n)
#define st_add_direct rb_parser_st_add_direct
#undef st_insert2
#define st_insert2 rb_parser_st_insert2
+#undef st_replace
+#define st_replace rb_parser_st_replace
#undef st_copy
#define st_copy rb_parser_st_copy
#undef st_delete_safe