Actions
Bug #19895
closedMemory leak in Ripper#sexp_raw called with invalid syntax
Description
There is a memory leak in Ripper#sexp_raw
with invalid syntax
I used the ruby_memcheck gem to find this leak.
Script to reproduce:¶
$ ruby_memcheck -e 'require "ripper"; Ripper.sexp_raw("break 1,;")'
Stack trace¶
64 bytes in 1 blocks are definitely lost in loss record 8,335 of 11,879
malloc (at /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
objspace_xmalloc0 (gc.c:11465)
*vtable_alloc_gen (ripper.y:6209)
*local_push.constprop.0 (ripper.y:12587)
*ripper_yyparse (ripper.y:1329)
*ripper_parse0 (ripper.y:13817)
rb_ensure (eval.c:997)
*ripper_parse (ripper.y:13855)
vm_call_cfunc_with_frame (vm_insnhelper.c:3037)
vm_sendish (vm_insnhelper.c:4751)
vm_exec_core (insns.def:778)
rb_vm_exec (vm.c:2220)
rb_ec_exec_node (eval.c:280)
ruby_run_node (eval.c:321)
main (main.c:47)
88 (24 direct, 64 indirect) bytes in 1 blocks are definitely lost in loss record 8,508 of 11,879
malloc (at /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
objspace_xmalloc0 (gc.c:11465)
*vtable_alloc_gen (ripper.y:6206)
*local_push.constprop.0 (ripper.y:12586)
*ripper_yyparse (ripper.y:1329)
*ripper_parse0 (ripper.y:13817)
rb_ensure (eval.c:997)
*ripper_parse (ripper.y:13855)
vm_call_cfunc_with_frame (vm_insnhelper.c:3037)
vm_sendish (vm_insnhelper.c:4751)
vm_exec_core (insns.def:778)
rb_vm_exec (vm.c:2220)
rb_ec_exec_node (eval.c:280)
ruby_run_node (eval.c:321)
main (main.c:47)
Valgrind reported errors (e.g. memory leak or use-after-free) (RuntimeError)
Expected behavior¶
The Ripper#sexp_raw
docs state that "By default, this method does not handle syntax errors in src, returning nil in such cases." Expected behavior, according to the documentation, would be nil
returned without any memory leak
Updated by jemmai (Jemma Issroff) almost 2 years ago
- Status changed from Open to Closed
Duplicate of [#19835]
Actions
Like0
Like0