# \[BUG\] non-initialized struct

**URL:** <https://www.ruby-forum.com/t/bug-non-initialized-struct/113583>\
**Category:** Development\
**Created:** [September 2, 2007, 7:49am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583 "2007-09-02T07:49:23Z")\
**Posts on this page:** 6\
**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:** [September 2, 2007, 7:49am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583/1 "2007-09-02T07:49:23Z")

</div>

e$B0J2\<$N$h$&$K$9$k$He(B [BUG] e$B$,=P$^$9!#e(B

## % ./ruby -ve ’ S = Struct.new(:a) s = Marshal.dump(S.new(1)) class Object remove\_const :S end class S end p Marshal.load(s)’ ruby 1.9.0 (2007-09-01 patchlevel 0) [i686-linux] -e:9: – control frame ---------- c:0004 p:---- s:0011 b:0011 l:000010 d:000010 CFUNC :load c:0003 p:0078 s:0007 b:0006 l:000005 d:000005 TOP -e:9 c:0002 p:---- s:0003 b:0003 l:000002 d:000002 FINISH :inherited c:0001 p:---- s:0001 b:-001 l:000000 d:000000 ------

DBG\> : “-e:9:in `’”  
– backtrace of native function call (Use addr2line) –  
0x80f6d1e  
0x8113320  
0x81133bf  
0x80d8358  
0x8070ff8  
0x8071752  
0x8071765  
0x805b936  
0x8071998  
0x80ecdce  
0x80f484d  
0x80f43dc  
0x80f0c23  
0x80f4a26  
0x80f506b  
0x805a32b  
0x805a3ae  
0x8057605  
0xb7e02ea8  
0x8057531

---

<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:** [September 3, 2007, 4:08am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583/2 "2007-09-03T04:08:19Z")

</div>

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31709] [BUG] non-initialized struct”  
on Sep.02,2007 14:49:01, [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
| e$B0J2\<$N$h$&$K$9$k$He(B [BUG] e$B$,=P$^$9!#e(B  
|  
| % ./ruby -ve ’  
| S = Struct.new(:a)  
| s = Marshal.dump(S.new(1))  
| class Object  
| remove\_const :S  
| end  
| class S  
| end  
| p Marshal.load(s)’

1.8e$B$G$bF1MM$J$N$G$H$j$“$($:e(B1.8e$B$G8+$F$\_$^$7$?$,!”$3$s$J46$8$Ge(B  
e$B$7$g$&$+e(B?

# e$B%a%C%;!\<%8$O$J$s$+Be0F5a$`e(B

# Index: marshal.c

— marshal.c (revision 13339)  
+++ marshal.c (working copy)  
@@ -1198,6 +1198,8 @@ r\_object0(arg, proc, ivp, extmod)  
ID slot;

```
   klass = path2class(r_unique(arg));

```

- 

```
 if (TYPE(klass) != T_STRUCT)

```

- rb\_raise(rb\_eArgError, “%s is not a struct”, rb\_class2name(klass));  
mem = rb\_struct\_s\_members(klass);  
if (mem == Qnil) {  
rb\_raise(rb\_eTypeError, “uninitialized struct”);

e$B$=$l$G$O!#e(B

---

<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:** [September 3, 2007, 4:36am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583/3 "2007-09-03T04:36:22Z")

</div>

e$B$J$+$@$G$9!#e(B

At Mon, 3 Sep 2007 11:07:28 +0900,  
U.Nakamura wrote in [ruby-dev:31718]:

> | p Marshal.load(s)’
> 
> 1.8e$B$G$bF1MM$J$N$G$H$j$"$($:e(B1.8e$B$G8+$F$\_$^$7$?$,!"$3$s$J46$8$Ge(B  
> e$B$7$g$&$+e(B?

rb\_struct\_s\_members()e$B$G%A%’%C%/$9$k$3$H$K$7$F!"e(B[BUG]e$B$8$c$J$/$Fe(B  
TypeErrore$B$+$J$K$+$K$9$k$H$$$&$N$O$I$&$G$7$g$&$+!#e(B

---

<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:** [September 3, 2007, 4:43am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583/4 "2007-09-03T04:43:22Z")

</div>

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31719] Re: [BUG] non-initialized struct”  
on Sep.03,2007 11:35:47, [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
| \> 1.8e$B$G$bF1MM$J$N$G$H$j$“$($:e(B1.8e$B$G8+$F$\_$^$7$?$,!”$3$s$J46$8$Ge(B  
| \> e$B$7$g$&$+e(B?  
|  
| rb\_struct\_s\_members()e$B$G%A%'%C%/$9$k$3$H$K$7$F!"e(B[BUG]e$B$8$c$J$/$Fe(B  
| TypeErrore$B$+$J$K$+$K$9$k$H$$$&$N$O$I$&$G$7$g$&$+!#e(B

ArgumentErrore$B$J$N$Oe(BMarshal.loade$B$NB\>$N%Q%?!\<%s$G$bF1MM$C$]$$$Ne(B  
e$B$G$=$&$7$?$N$G$9$,!"e(Brb\_struct\_s\_members()e$B$NJ}$GNc30$K$9$k$J$ie(B  
TypeErrore$B$G$7$g$&$M!#e(B

e$B$7$+$7!“$=$b$=$be(BStructe$B$8$c$J$$J\*$KBP$7$Fe(Brb\_struct\_s\_members()  
e$B$r8F$V$H$$$&%3!\<%I$O$I$&9M$($F$b%P%0$C$F$k$o$1$G!”$=$3$Ge(B[BUG]  
e$B$,=P$k$N$be(Bmarshale$BB&$G%A%'%C%/$9$Y$-$@$H$$$&$N$b@5Ev$J9M$(J}$He(B  
e$B$$$&5$$b$7$^$9!#e(B

e$B$=$l$G$O!#e(B

---

<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:** [September 3, 2007, 6:29am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583/5 "2007-09-03T06:29:26Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
“U.Nakamura” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$7$+$7!“$=$b$=$be(BStructe$B$8$c$J$$J\*$KBP$7$Fe(Brb\_struct\_s\_members()  
> e$B$r8F$V$H$$$&%3!\<%I$O$I$&9M$($F$b%P%0$C$F$k$o$1$G!”$=$3$Ge(B[BUG]  
> e$B$,=P$k$N$be(Bmarshale$BB&$G%A%'%C%/$9$Y$-$@$H$$$&$N$b@5Ev$J9M$(J}$He(B  
> e$B$$$&5$$b$7$^$9!#e(B

e$B;d$Oe(B Struct e$B0J30$Ge(B T\_STRUCT e$B$r;H$&$H$$$&OCe(B (Range)  
e$B$r9M$($Fe(B  
e$B$$$k$N$G!“$I$&9M$($F$b%P%0!”$C$FDx$K$O46$8$J$$$G$9!#e(B

e$B$"$H!"e(B[ruby-dev:31718] e$B$N%Q%C%A$O!"e(BTYPE(klass)  
e$B$H$7$F$^$9$,!"e(B  
e$B$3$l$O$$$D$be(B T\_CLASS e$B$J$s$G$O$J$$$+$H;W$$$^$9!#e(B

---

<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:** [September 3, 2007, 7:54am UTC](https://www.ruby-forum.com/t/bug-non-initialized-struct/113583/6 "2007-09-03T07:54:31Z")

</div>

e$B$3$s$K$A$O!"$J$+$`$ie(B(e$B$&e(B)e$B$G$9!#e(B

In message “[ruby-dev:31721] Re: [BUG] non-initialized struct”  
on Sep.03,2007 13:27:46, [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:  
| In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
| “U.Nakamura” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:  
|  
| \> e$B$7$+$7!“$=$b$=$be(BStructe$B$8$c$J$$J\*$KBP$7$Fe(Brb\_struct\_s\_members()  
| \> e$B$r8F$V$H$$$&%3!\<%I$O$I$&9M$($F$b%P%0$C$F$k$o$1$G!”$=$3$Ge(B[BUG]  
| \> e$B$,=P$k$N$be(Bmarshale$BB&$G%A%'%C%/$9$Y$-$@$H$$$&$N$b@5Ev$J9M$(J}$He(B  
| \> e$B$$$&5$$b$7$^$9!#e(B  
|  
| e$B;d$Oe(B Struct e$B0J30$Ge(B T\_STRUCT e$B$r;H$&$H$$$&OCe(B (Range) e$B$r9M$($Fe(B  
| e$B$$$k$N$G!“$I$&9M$($F$b%P%0!”$C$FDx$K$O46$8$J$$$G$9!#e(B

e$B$3$N\>l9g!“!Ve(BStructe$B$8$c$J$$$b$N!W$O!”$(!\<$H!“e(BStructe$B$N7A$r$7$Fe(B  
e$B$J$$$b$N!”$H$$$&$3$H$G$\*4j$$$7$^$9!#e(B

# e$B$J$s$+$&$^$/8@MU$K=PMh$J$$e(B

| e$B$"$H!"e(B[ruby-dev:31718] e$B$N%Q%C%A$O!"e(BTYPE(klass) e$B$H$7$F$^$9$,!"e(B  
| e$B$3$l$O$$$D$be(B T\_CLASS e$B$J$s$G$O$J$$$+$H;W$$$^$9!#e(B

e$BG\>$,G?$s$G$^$7$?!#e(B  
if (rb\_class\_inherited\_p(klass, rb\_cStruct) != Qtrue)  
e$B$“$?$j$K$J$j$^$9$M!#e(B  
e$B$7$+$7$3$l$G$be(BStructe$B$re(Bdupe$B$C$?$b$N$,;H$o$l$k$He(Bloade$B$G$-$J$/$J$ke(B  
e$B$+$i%@%a!”$H!#e(B

e$BOC$H$7$F$OC1=c$J$s$@$1$I0U30$HFq$7$$$G$9$M$(!#e(B  
e$B$b$A$m$s!"$J$+$@$5$s$,8@$C$?$h$&$Ke(Brb\_struct\_s\_members()e$B$Ne(Brb\_bug()  
e$B$re(Brb\_raise()e$B$KJQ$($l$P0l=V$G2r7h$G$9$,e(B…

e$B$=$l$G$O!#e(B
