![]() rb_io_fptr_finalize_internal frees the memory region. ================================================================= ==85264==ERROR: AddressSanitizer: heap-use-after-free on address 0x610000000d8c at pc 0x5608e38077f7 bp 0x7ffee12d5440 sp 0x7ffee12d5438 READ of size 4 at 0x610000000d8c thread T0 #0 0x5608e38077f6 in rb_io_memsize io.c:4749:24 #1 0x5608e37a0481 in obj_memsize_of gc.c:3547:14 #2 0x5608e37a4f30 in check_rvalue_consistency gc.c:1107:2 #3 0x5608e37a2624 in RVALUE_OLD_P gc.c:1218:5 #4 0x5608e37a5bae in rb_gc_force_recycle gc.c:6652:18 #5 0x5608e38191f9 in rb_f_backquote io.c:9021:5 #6 0x5608e3d8aa14 in call_cfunc_1 vm_insnhelper.c:2058:12 #7 0x5608e3d6e23d in vm_call_cfunc_with_frame vm_insnhelper.c:2211:11 #8 0x5608e3d54a35 in vm_call_cfunc vm_insnhelper.c:2229:12 #9 0x5608e3d5253b in vm_call_method_each_type vm_insnhelper.c:2564:9 #10 0x5608e3d51f50 in vm_call_method vm_insnhelper.c:2701:13 #11 0x5608e3cf2de4 in vm_call_general vm_insnhelper.c:2734:12 #12 0x5608e3d79918 in vm_sendish vm_insnhelper.c:3627:11 #13 0x5608e3d06cf5 in vm_exec_core insns.def:789:11 #14 0x5608e3d43700 in rb_vm_exec vm.c:1892:22 #15 0x5608e3d47cbf in rb_iseq_eval_main vm.c:2151:11 #16 0x5608e37620ca in ruby_exec_internal eval.c:262:2 #17 0x5608e376198b in ruby_exec_node eval.c:326:12 #18 0x5608e37617d0 in ruby_run_node eval.c:318:25 #19 0x5608e35c9486 in main main.c:42:9 #20 0x7f62e9421b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 #21 0x5608e3522289 in _start (miniruby+0x15f289) 0x610000000d8c is located 76 bytes inside of 192-byte region [0x610000000d40,0x610000000e00) freed by thread T0 here: #0 0x5608e359a2ed in free (miniruby+0x1d72ed) #1 0x5608e37af421 in objspace_xfree gc.c:9591:5 #2 0x5608e37af3da in ruby_sized_xfree gc.c:9687:2 #3 0x5608e3799ac8 in ruby_xfree gc.c:9694:5 #4 0x5608e380746d in rb_io_fptr_finalize_internal io.c:4728:5 #5 0x5608e38191ed in rb_f_backquote io.c:9020:5 #6 0x5608e3d8aa14 in call_cfunc_1 vm_insnhelper.c:2058:12 #7 0x5608e3d6e23d in vm_call_cfunc_with_frame vm_insnhelper.c:2211:11 #8 0x5608e3d54a35 in vm_call_cfunc vm_insnhelper.c:2229:12 #9 0x5608e3d5253b in vm_call_method_each_type vm_insnhelper.c:2564:9 #10 0x5608e3d51f50 in vm_call_method vm_insnhelper.c:2701:13 #11 0x5608e3cf2de4 in vm_call_general vm_insnhelper.c:2734:12 #12 0x5608e3d79918 in vm_sendish vm_insnhelper.c:3627:11 #13 0x5608e3d06cf5 in vm_exec_core insns.def:789:11 #14 0x5608e3d43700 in rb_vm_exec vm.c:1892:22 #15 0x5608e3d47cbf in rb_iseq_eval_main vm.c:2151:11 #16 0x5608e37620ca in ruby_exec_internal eval.c:262:2 #17 0x5608e376198b in ruby_exec_node eval.c:326:12 #18 0x5608e37617d0 in ruby_run_node eval.c:318:25 #19 0x5608e35c9486 in main main.c:42:9 #20 0x7f62e9421b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 previously allocated by thread T0 here: #0 0x5608e359a56d in malloc (miniruby+0x1d756d) #1 0x5608e37aed12 in objspace_xmalloc0 gc.c:9416:5 #2 0x5608e37aebe7 in ruby_xmalloc0 gc.c:9600:12 #3 0x5608e37aea8b in ruby_xmalloc_body gc.c:9609:12 #4 0x5608e37a6d64 in ruby_xmalloc gc.c:11469:12 #5 0x5608e380e4b4 in rb_io_fptr_new io.c:8040:19 #6 0x5608e380e446 in rb_io_make_open_file io.c:8077:10 #7 0x5608e3850ea0 in pipe_open io.c:6707:5 #8 0x5608e384edb4 in pipe_open_s io.c:6772:12 #9 0x5608e381910b in rb_f_backquote io.c:9014:12 #10 0x5608e3d8aa14 in call_cfunc_1 vm_insnhelper.c:2058:12 #11 0x5608e3d6e23d in vm_call_cfunc_with_frame vm_insnhelper.c:2211:11 #12 0x5608e3d54a35 in vm_call_cfunc vm_insnhelper.c:2229:12 #13 0x5608e3d5253b in vm_call_method_each_type vm_insnhelper.c:2564:9 #14 0x5608e3d51f50 in vm_call_method vm_insnhelper.c:2701:13 #15 0x5608e3cf2de4 in vm_call_general vm_insnhelper.c:2734:12 #16 0x5608e3d79918 in vm_sendish vm_insnhelper.c:3627:11 #17 0x5608e3d06cf5 in vm_exec_core insns.def:789:11 #18 0x5608e3d43700 in rb_vm_exec vm.c:1892:22 #19 0x5608e3d47cbf in rb_iseq_eval_main vm.c:2151:11 #20 0x5608e37620ca in ruby_exec_internal eval.c:262:2 #21 0x5608e376198b in ruby_exec_node eval.c:326:12 #22 0x5608e37617d0 in ruby_run_node eval.c:318:25 #23 0x5608e35c9486 in main main.c:42:9 #24 0x7f62e9421b96 in __libc_start_main /build/glibc-OTsEL5/glibc-2.27/csu/../csu/libc-start.c:310 SUMMARY: AddressSanitizer: heap-use-after-free io.c:4749:24 in rb_io_memsize Shadow bytes around the buggy address: 0x0c207fff8160: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 0x0c207fff8170: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c207fff8180: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 0x0c207fff8190: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c207fff81a0: fa fa fa fa fa fa fa fa fd fd fd fd fd fd fd fd =>0x0c207fff81b0: fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd 0x0c207fff81c0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c207fff81d0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c207fff81e0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c207fff81f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c207fff8200: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb Shadow gap: cc ==85264==ABORTING |
||
---|---|---|
basictest | ||
benchmark | ||
bin | ||
bootstraptest | ||
ccan | ||
coroutine | ||
coverage | ||
cygwin | ||
defs | ||
doc | ||
enc | ||
ext | ||
gems | ||
include | ||
lib | ||
libexec | ||
man | ||
misc | ||
missing | ||
sample | ||
spec | ||
template | ||
test | ||
tool | ||
win32 | ||
.dir-locals.el | ||
.document | ||
.editorconfig | ||
.gdbinit | ||
.gitattributes | ||
.gitignore | ||
.indent.pro | ||
.travis.yml | ||
aclocal.m4 | ||
addr2line.c | ||
addr2line.h | ||
appveyor.yml | ||
array.c | ||
ast.c | ||
azure-pipelines.yml | ||
bignum.c | ||
BSDL | ||
class.c | ||
common.mk | ||
compar.c | ||
compile.c | ||
complex.c | ||
configure.ac | ||
constant.h | ||
cont.c | ||
CONTRIBUTING.md | ||
COPYING | ||
COPYING.ja | ||
debug.c | ||
debug_counter.c | ||
debug_counter.h | ||
dir.c | ||
dln.c | ||
dln.h | ||
dln_find.c | ||
dmydln.c | ||
dmyenc.c | ||
dmyext.c | ||
encindex.h | ||
encoding.c | ||
enum.c | ||
enumerator.c | ||
error.c | ||
eval.c | ||
eval_error.c | ||
eval_intern.h | ||
eval_jump.c | ||
file.c | ||
gc.c | ||
gc.h | ||
gem_prelude.rb | ||
golf_prelude.rb | ||
goruby.c | ||
GPL | ||
hash.c | ||
hrtime.h | ||
ia64.S | ||
id_table.c | ||
id_table.h | ||
inits.c | ||
insns.def | ||
internal.h | ||
io.c | ||
iseq.c | ||
iseq.h | ||
KNOWNBUGS.rb | ||
LEGAL | ||
lex.c.blt | ||
load.c | ||
loadpath.c | ||
localeinit.c | ||
main.c | ||
Makefile.in | ||
marshal.c | ||
math.c | ||
method.h | ||
miniinit.c | ||
mjit.c | ||
mjit.h | ||
mjit_compile.c | ||
mjit_worker.c | ||
NEWS | ||
node.c | ||
node.h | ||
numeric.c | ||
object.c | ||
pack.c | ||
parse.y | ||
prelude.rb | ||
probes.d | ||
probes_helper.h | ||
proc.c | ||
process.c | ||
random.c | ||
range.c | ||
rational.c | ||
re.c | ||
README.EXT | ||
README.EXT.ja | ||
README.ja.md | ||
README.md | ||
regcomp.c | ||
regenc.c | ||
regenc.h | ||
regerror.c | ||
regexec.c | ||
regint.h | ||
regparse.c | ||
regparse.h | ||
regsyntax.c | ||
ruby-runner.c | ||
ruby.c | ||
ruby_assert.h | ||
ruby_atomic.h | ||
rubystub.c | ||
safe.c | ||
signal.c | ||
siphash.c | ||
siphash.h | ||
sparc.c | ||
sprintf.c | ||
st.c | ||
strftime.c | ||
string.c | ||
struct.c | ||
symbol.c | ||
symbol.h | ||
thread.c | ||
thread_pthread.c | ||
thread_pthread.h | ||
thread_sync.c | ||
thread_win32.c | ||
thread_win32.h | ||
time.c | ||
timev.h | ||
transcode.c | ||
transcode_data.h | ||
transient_heap.c | ||
transient_heap.h | ||
util.c | ||
variable.c | ||
version.c | ||
version.h | ||
vm.c | ||
vm_args.c | ||
vm_backtrace.c | ||
vm_core.h | ||
vm_debug.h | ||
vm_dump.c | ||
vm_eval.c | ||
vm_exec.c | ||
vm_exec.h | ||
vm_insnhelper.c | ||
vm_insnhelper.h | ||
vm_method.c | ||
vm_opts.h | ||
vm_trace.c | ||
vsnprintf.c | ||
wercker.yml |
What's Ruby
Ruby is the interpreted scripting language for quick and easy object-oriented programming. It has many features to process text files and to manage system (as in Perl). It is simple, straight-forward, and extensible.
Features of Ruby
- Simple Syntax
- Normal Object-oriented Features (e.g. class, method calls)
- Advanced Object-oriented Features (e.g. mix-in, singleton-method)
- Operator Overloading
- Exception Handling
- Iterators and Closures
- Garbage Collection
- Dynamic Loading of Object Files (on some architectures)
- Highly Portable (works on many Unix-like/POSIX compatible platforms as well as Windows, macOS, Haiku, etc.) cf. https://github.com/ruby/ruby/blob/trunk/doc/contributing.rdoc#platform-maintainers
How to get Ruby
For a complete list of ways to install Ruby, including using third-party tools like rvm, see:
https://www.ruby-lang.org/en/downloads/
Git
The mirror of the Ruby source tree can be checked out with the following command:
$ git clone https://github.com/ruby/ruby.git
There are some other branches under development. Try the following command to see the list of branches:
$ git ls-remote https://github.com/ruby/ruby.git
You may also want to use https://git.ruby-lang.org/ruby.git (actual trunk of Ruby source) for better latency in Japan.
Subversion
Stable branches for older Ruby versions can be checked out with the following command:
$ svn co https://svn.ruby-lang.org/repos/ruby/branches/ruby_2_6/ ruby
Try the following command to see the list of branches:
$ svn ls https://svn.ruby-lang.org/repos/ruby/branches/
Ruby home page
Mailing list
There is a mailing list to discuss Ruby. To subscribe to this list, please send the following phrase:
subscribe
in the mail body (not subject) to the address ruby-talk-request@ruby-lang.org.
How to compile and install
-
If you want to use Microsoft Visual C++ to compile Ruby, read win32/README.win32 instead of this document.
-
If
./configure
does not exist or is older thanconfigure.ac
, runautoconf
to (re)generate configure. -
Run
./configure
, which will generateconfig.h
andMakefile
.Some C compiler flags may be added by default depending on your environment. Specify
optflags=..
andwarnflags=..
as necessary to override them. -
Edit
defines.h
if you need. Usually this step will not be needed. -
Remove comment mark(
#
) before the module names fromext/Setup
(or add module names if not present), if you want to link modules statically.If you don't want to compile non static extension modules (probably on architectures which do not allow dynamic loading), remove comment mark from the line "
#option nodynamic
" inext/Setup
.Usually this step will not be needed.
-
Run
make
.- On Mac, set RUBY_CODESIGN environment variable with a signing identity.
It uses the identity to sign
ruby
binary. See also codesign(1).
- On Mac, set RUBY_CODESIGN environment variable with a signing identity.
It uses the identity to sign
-
Optionally, run '
make check
' to check whether the compiled Ruby interpreter works well. If you see the message "check succeeded
", your Ruby works as it should (hopefully). -
Optionally, run
make update-gems
andmake extract-gems
.If you want to install bundled gems, run
make update-gems
andmake extract-gems
before runningmake install
. -
Run '
make install
'.This command will create the following directories and install files into them.
${DESTDIR}${prefix}/bin
${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}
${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
${DESTDIR}${prefix}/lib
${DESTDIR}${prefix}/lib/ruby
${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}
${DESTDIR}${prefix}/lib/ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
${DESTDIR}${prefix}/lib/ruby/site_ruby
${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}
${DESTDIR}${prefix}/lib/ruby/site_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
${DESTDIR}${prefix}/lib/ruby/vendor_ruby
${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}
${DESTDIR}${prefix}/lib/ruby/vendor_ruby/${MAJOR}.${MINOR}.${TEENY}/${PLATFORM}
${DESTDIR}${prefix}/lib/ruby/gems/${MAJOR}.${MINOR}.${TEENY}
${DESTDIR}${prefix}/share/man/man1
${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system
If Ruby's API version is 'x.y.z', the
${MAJOR}
is 'x', the${MINOR}
is 'y', and the${TEENY}
is 'z'.NOTE: teeny of the API version may be different from one of Ruby's program version
You may have to be a super user to install Ruby.
If you fail to compile Ruby, please send the detailed error report with the error log and machine/OS type, to help others.
Some extension libraries may not get compiled because of lack of necessary
external libraries and/or headers, then you will need to run 'make distclean-ext
'
to remove old configuration after installing them in such case.
Copying
See the file COPYING.
Feedback
Questions about the Ruby language can be asked on the Ruby-Talk mailing list (https://www.ruby-lang.org/en/community/mailing-lists) or on websites like (https://stackoverflow.com).
Bugs should be reported at https://bugs.ruby-lang.org. Read HowToReport for more information.
Contributing
See the file CONTRIBUTING.md
The Author
Ruby was originally designed and developed by Yukihiro Matsumoto (Matz) in 1995.