# Invalid read/write by ~big\_zero

**URL:** <https://www.ruby-forum.com/t/invalid-read-write-by-big-zero/109421>\
**Category:** Development\
**Created:** [July 14, 2007, 5:46pm UTC](https://www.ruby-forum.com/t/invalid-read-write-by-big-zero/109421 "2007-07-14T17:46:12Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [July 14, 2007, 5:46pm UTC](https://www.ruby-forum.com/t/invalid-read-write-by-big-zero/109421/1 "2007-07-14T17:46:12Z")

</div>

e$B0J2\<$N$h$&$K$9$k$He(B valgrind e$B$Ge(B  
Invalid read of size 4 e$B$de(B  
Invalid write of size 4 e$B$,=P$^$9e(B

% valgrind ./ruby -ve ’  
big\_neg = 0x40000000.coerce(-1)[0]  
big\_zero = 0x40000000.coerce(0)[0]  
p big\_zero % big\_neg  
p ~big\_zero’  
==8288== Memcheck, a memory error detector.  
==8288== Copyright © 2002-2006, and GNU GPL’d, by Julian Seward et al.  
==8288== Using LibVEX rev 1658, a library for dynamic binary  
translation.  
==8288== Copyright © 2004-2006, and GNU GPL’d, by OpenWorks LLP.  
==8288== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation  
framework.  
==8288== Copyright © 2000-2006, and GNU GPL’d, by Julian Seward et al.  
==8288== For more details, rerun with: -v  
==8288==  
–8288-- DWARF2 CFI reader: unhandled CFI instruction 0:50  
–8288-- DWARF2 CFI reader: unhandled CFI instruction 0:50  
–8288-- DWARF2 CFI reader: unhandled CFI instruction 0:50  
–8288-- DWARF2 CFI reader: unhandled CFI instruction 0:50  
ruby 1.9.0 (2007-07-14 patchlevel 0) [i686-linux]  
0  
==8288== Invalid read of size 4  
==8288== at 0x80E5A98: get2comp (bignum.c:76)  
==8288== by 0x80E77BE: rb\_big\_neg (bignum.c:1043)  
==8288== by 0x80D9858: vm\_call\_method (insnhelper.ci:351)  
==8288== by 0x80D4F7D: vm\_eval (insns.def:1171)  
==8288== by 0x80D86E3: vm\_eval\_body (vm.c:1165)  
==8288== by 0x80D8A1A: rb\_iseq\_eval (vm.c:1374)  
==8288== by 0x80590C8: ruby\_exec\_node (eval.c:226)  
==8288== by 0x805D63C: ruby\_run\_node (eval.c:251)  
==8288== by 0x8056C95: main (main.c:46)  
==8288== Address 0x42FB4A0 is 0 bytes inside a block of size 1 alloc’d  
==8288== at 0x401D38B: malloc (vg\_replace\_malloc.c:149)  
==8288== by 0x8062B79: ruby\_xmalloc (gc.c:250)  
==8288== by 0x80E5B8C: bignew\_1 (bignum.c:49)  
==8288== by 0x80E6772: rb\_big\_clone (bignum.c:59)  
==8288== by 0x80E7782: rb\_big\_neg (bignum.c:1032)  
==8288== by 0x80D9858: vm\_call\_method (insnhelper.ci:351)  
==8288== by 0x80D4F7D: vm\_eval (insns.def:1171)  
==8288== by 0x80D86E3: vm\_eval\_body (vm.c:1165)  
==8288== by 0x80D8A1A: rb\_iseq\_eval (vm.c:1374)  
==8288== by 0x80590C8: ruby\_exec\_node (eval.c:226)  
==8288== by 0x805D63C: ruby\_run\_node (eval.c:251)  
==8288== by 0x8056C95: main (main.c:46)  
==8288==  
==8288== Invalid write of size 4  
==8288== at 0x80E5AA2: get2comp (bignum.c:77)  
==8288== by 0x80E77BE: rb\_big\_neg (bignum.c:1043)  
==8288== by 0x80D9858: vm\_call\_method (insnhelper.ci:351)  
==8288== by 0x80D4F7D: vm\_eval (insns.def:1171)  
==8288== by 0x80D86E3: vm\_eval\_body (vm.c:1165)  
==8288== by 0x80D8A1A: rb\_iseq\_eval (vm.c:1374)  
==8288== by 0x80590C8: ruby\_exec\_node (eval.c:226)  
==8288== by 0x805D63C: ruby\_run\_node (eval.c:251)  
==8288== by 0x8056C95: main (main.c:46)  
==8288== Address 0x42FB4A0 is 0 bytes inside a block of size 1 alloc’d  
==8288== at 0x401D38B: malloc (vg\_replace\_malloc.c:149)  
==8288== by 0x8062B79: ruby\_xmalloc (gc.c:250)  
==8288== by 0x80E5B8C: bignew\_1 (bignum.c:49)  
==8288== by 0x80E6772: rb\_big\_clone (bignum.c:59)  
==8288== by 0x80E7782: rb\_big\_neg (bignum.c:1032)  
==8288== by 0x80D9858: vm\_call\_method (insnhelper.ci:351)  
==8288== by 0x80D4F7D: vm\_eval (insns.def:1171)  
==8288== by 0x80D86E3: vm\_eval\_body (vm.c:1165)  
==8288== by 0x80D8A1A: rb\_iseq\_eval (vm.c:1374)  
==8288== by 0x80590C8: ruby\_exec\_node (eval.c:226)  
==8288== by 0x805D63C: ruby\_run\_node (eval.c:251)  
==8288== by 0x8056C95: main (main.c:46)  
==8288==  
==8288== Conditional jump or move depends on uninitialised value(s)  
==8288== at 0x80E5AB9: get2comp (bignum.c:80)  
==8288== by 0x80E77BE: rb\_big\_neg (bignum.c:1043)  
==8288== by 0x80D9858: vm\_call\_method (insnhelper.ci:351)  
==8288== by 0x80D4F7D: vm\_eval (insns.def:1171)  
==8288== by 0x80D86E3: vm\_eval\_body (vm.c:1165)  
==8288== by 0x80D8A1A: rb\_iseq\_eval (vm.c:1374)  
==8288== by 0x80590C8: ruby\_exec\_node (eval.c:226)  
==8288== by 0x805D63C: ruby\_run\_node (eval.c:251)  
==8288== by 0x8056C95: main (main.c:46)  
0  
==8288==  
==8288== ERROR SUMMARY: 3 errors from 3 contexts (suppressed: 19 from 1)  
==8288== malloc/free: in use at exit: 881,852 bytes in 7,038 blocks.  
==8288== malloc/free: 7,139 allocs, 101 frees, 898,767 bytes allocated.  
==8288== For counts of detected errors, rerun with: -v  
==8288== searching for pointers to 7,038 not-freed blocks.  
==8288== checked 650,504 bytes.  
==8288==  
==8288== LEAK SUMMARY:  
==8288== definitely lost: 0 bytes in 0 blocks.  
==8288== possibly lost: 68 bytes in 1 blocks.  
==8288== still reachable: 881,784 bytes in 7,037 blocks.  
==8288== suppressed: 0 bytes in 0 blocks.  
==8288== Reachable blocks (those to which a pointer was found) are not  
shown.  
==8288== To see them, rerun with: --show-reachable=yes
