# RSTRING(value)-\>ptr == NULL?

**URL:** <https://www.ruby-forum.com/t/rstring-value-ptr-null/114316>\
**Category:** Development\
**Created:** [September 11, 2007, 10:11am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316 "2007-09-11T10:11:51Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 11, 2007, 10:11am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/1 "2007-09-11T10:11:51Z")

</div>

Tietew e$B$G$9!#e(B

RString::ptr e$B$,e(B NULL e$B$Je(B String  
e$B$r%i%$%V%i%j$KEO$7$?:]$Ke(B SEGV e$B$re(B  
e$B5/$3$9$3$H$,$"$j$^$9!#e(B

e$B6qBNE\*$K$ONc$($Pe(B  
require ‘rubygems’  
require ‘idn’  
IDN::Idna.toASCII(" ".chop.downcase)  
e$B$,e(B SEGV e$B$j$^$9!#e(B

idna.c e$B$Oe(B  
rb\_check\_convert\_type(str, T\_STRING, “String”, “to\_s”);  
e$B$r8F$s$G$$$^$9$,!"e(BStringValue() e$B$O$7$F$$$^$;$s!#e(B  
e$B$s$Ge(B RSTRING(str)-\>ptr e$B$,e(B NULL e$B$N%^%^e(B idna\_to\_ascii\_8z  
e$B$r8F$s$G!"e(B  
e$B$=$NCf$Ge(B SEGV e$B$7$^$9!#e(B

e$B$3$l$Oe(B StringValue() e$B$7$J$$e(B idna.c  
e$B$,0-$$$s$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 12, 2007, 7:47am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/2 "2007-09-12T07:47:12Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:31774] RSTRING(value)-\>ptr == NULL ?”  
on Tue, 11 Sep 2007 17:04:26 +0900, Tietew  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|RString::ptr e$B$,e(B NULL e$B$Je(B String e$B$r%i%$%V%i%j$KEO$7$?:]$Ke(B SEGV e$B$re(B  
|e$B5/$3$9$3$H$,$"$j$^$9!#e(B

|e$B$3$l$Oe(B StringValue() e$B$7$J$$e(B idna.c e$B$,0-$$$s$G$7$g$&$+!#e(B

e$B$G$-$l$P$=$&$$$$$?$$$H$3$m$G$9!#OC$rJ9$+$J$$$G$b$J$$$G$9$,!#e(B

---

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 12, 2007, 10:47am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/3 "2007-09-12T10:47:42Z")

</div>

On Wed, 12 Sep 2007 14:45:59 +0900  
In article [E1IVL2p-00011H-8y@x31](mailto:E1IVL2p-00011H-8y@x31)  
[[ruby-dev:31778] Re: RSTRING(value)-\>ptr == NULL ?]  
Yukihiro M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

e$B$"$j$,$H$&$4$6$$$^$9!#e(B

> |RString::ptr e$B$,e(B NULL e$B$Je(B String e$B$r%i%$%V%i%j$KEO$7$?:]$Ke(B SEGV e$B$re(B  
> |e$B5/$3$9$3$H$,$"$j$^$9!#e(B
> 
> |e$B$3$l$Oe(B StringValue() e$B$7$J$$e(B idna.c e$B$,0-$$$s$G$7$g$&$+!#e(B
> 
> e$B$G$-$l$P$=$&$$$$$?$$$H$3$m$G$9!#OC$rJ9$+$J$$$G$b$J$$$G$9$,!#e(B

rubyforgee$B$Ne(Bidne$B$K%P%0%l%]=P$=$&$H$7$F5?Ld$K;W$C$?$s$G$9!#e(B

e$B$3$&$$$&e(B String e$B$r:n$k:G\>.$N%3!\<%I$Oe(B " ".chop.dup  
e$B$N$h$&$J$N$G!"e(B  
e$B%i%$%V%i%j$K$3$&$$$&J8;zNs$r6t$o$;$FMn$A$J$$$+$I$&$+3N$+$a$F$\_$ke(B  
e$B$H$+!#e(B

---

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 20, 2007, 7:13am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/4 "2007-09-20T07:13:09Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Tietew [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B%i%$%V%i%j$K$3$&$$$&J8;zNs$r6t$o$;$FMn$A$J$$$+$I$&$+3N$+$a$F$\_$ke(B  
> e$B$H$+!#e(B

[ruby-core:1177] e$B$G;w$?;XE&$,$5$l$F$$$^$9!#$=$N%9%l%C%I$K$\*e(B  
e$B$$$F$^$D$b$H$5$s$Oe(B [ruby-core:1185] e$B$Ge(B 1.8.0  
e$B$K$O6uJ8;zNs$Ge(B  
e$B$be(B ptr e$B$Oe(B “” e$B$r;X$9$h$&$K$9$k$HH/8@$7$F$$$^$9!#e(B

e$B$^$?!"e(B1.9 e$B$G$Oe(B RSTRING\_PTR(str) e$B$Oe(B " ".chop.dup  
e$B$Oe(B NULL e$B$K$Je(B  
e$B$j$^$;$s!#e(B

e$B$=$N$&$Ae(B Ruby e$BK\BN$,JQ$o$C$FLdBj$,L5$/$J$k0l;~E\*$JOC$KBP$7$Fe(B  
e$B%i%$%V%i%j$r=$@5$5$;$k$N$OL5BL$JO+NO$G!“$”$^$j9,$;$JA\*Br$G$Oe(B  
e$BL5$$$H46$8$^$9!#e(B

e$B$J$\*!“e(B[ruby-core:1185] e$B$He(B [ruby-dev:31778]  
e$B$NH/8@$K$O?)$$0ce(B  
e$B$$$,$”$j$^$9$,!“$h$/$”$k$3$H$G$9!#;d$N?dB,$H$7$F$O!“e(BNULL e$B$Ke(B  
e$B$J$C$F$$$k$N$OC1$J$k=$@51L$l$G$”$k2DG=@-$,9b$$$H;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 20, 2007, 9:32am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/5 "2007-09-20T09:32:24Z")

</div>

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

At Thu, 20 Sep 2007 14:12:43 +0900,  
Tanaka A. wrote in [ruby-dev:31800]:

> [ruby-core:1177] e$B$G;w$?;XE&$,$5$l$F$$$^$9!#$=$N%9%l%C%I$K$\*e(B  
> e$B$$$F$^$D$b$H$5$s$Oe(B [ruby-core:1185] e$B$Ge(B 1.8.0 e$B$K$O6uJ8;zNs$Ge(B  
> e$B$be(B ptr e$B$Oe(B “” e$B$r;X$9$h$&$K$9$k$HH/8@$7$F$$$^$9!#e(B

e$B$=$s$JOC$b$"$j$^$7$?$M$’!#e(B

> e$B$^$?!"e(B1.9 e$B$G$Oe(B RSTRING\_PTR(str) e$B$Oe(B " ".chop.dup e$B$Oe(B NULL e$B$K$Je(B  
> e$B$j$^$;$s!#e(B

RSTRING\_PTR()e$B$N\<BAu\<+BN$,Bg$-$/JQ$o$C$F$^$9$+$i!#e(B

> e$B$J$\*!“e(B[ruby-core:1185] e$B$He(B [ruby-dev:31778] e$B$NH/8@$K$O?)$$0ce(B  
> e$B$$$,$”$j$^$9$,!"$h$/$"$k$3$H$G$9!#;d$N?dB,$H$7$F$O!“e(BNULL e$B$Ke(B  
> e$B$J$C$F$$$k$N$OC1$J$k=$@51L$l$G$”$k2DG=@-$,9b$$$H;W$$$^$9!#e(B

e$B$b$&:G=i$+$ie(BNULLe$B$K$O$7$J$$$H$$$&$3$H$G$b$$$$$H;W$$$^$9$,!"$3$s$Je(B  
e$B$H$3$G$I$&$G$7$g$&$+!#e(B

# Index: string.c

— string.c (revision 13449)  
+++ string.c (working copy)  
@@ -60,11 +60,15 @@ str\_frozen\_check(s)  
}

+static VALUE str\_alloc0 \_((VALUE, int));  
static VALUE str\_alloc \_((VALUE));  
+static VALUE str\_alloc1 \_((VALUE));  
+  
static VALUE  
-str\_alloc(klass)  
+str\_alloc0(klass, flags)  
VALUE klass;

- int flags;  
{  
NEWOBJ(str, struct RString);

- OBJSETUP(str, klass, T\_STRING);

- OBJSETUP(str, klass, flags);

+static const char null\_str[] = “”;  
+#define null\_str (char \*)null\_str  
+  
+static VALUE  
+str\_alloc(klass)

- VALUE klass;  
+{
- VALUE str = str\_alloc0(klass, T\_STRING | ELTS\_SHARED);
- RSTRING(str)-\>ptr = null\_str;
- return str;  
+}
- 

+static VALUE  
+str\_alloc1(klass)

- VALUE klass;  
+{
- return str\_alloc0(klass, T\_STRING);  
+}
- 

static VALUE  
str\_new(klass, ptr, len)  
@@ -87,5 +110,5 @@ str\_new(klass, ptr, len)  
}

- str = str\_alloc(klass);

- str = str\_alloc1(klass);  
RSTRING(str)-\>len = len;  
RSTRING(str)-\>aux.capa = len;  
@@ -146,5 +169,4 @@ str\_new3(klass, str)  
RSTRING(str2)-\>ptr = RSTRING(str)-\>ptr;  
RSTRING(str2)-\>aux.shared = str;

- FL\_SET(str2, ELTS\_SHARED);

- VALUE str2 = str\_alloc(klass);

- VALUE str2 = str\_alloc1(klass);

- VALUE str = str\_alloc(rb\_cString);

- VALUE str = str\_alloc1(rb\_cString);

+static int str\_independent \_((VALUE));  
+  
static void  
rb\_str\_shared\_replace(str, str2)  
@@ -263,6 +287,5 @@ rb\_str\_shared\_replace(str, str2)  
{  
if (str == str2) return;

- rb\_str\_modify(str);
- if (!FL\_TEST(str, ELTS\_SHARED)) free(RSTRING(str)-\>ptr);

- if (str\_independent(str)) xfree(RSTRING(str)-\>ptr);  
if (NIL\_P(str2)) {  
RSTRING(str)-\>ptr = 0;  
@@ -539,6 +570,4 @@ rb\_str\_associated(str)  
}

## -static char \*null\_str = “”;

VALUE  
rb\_string\_value(ptr)  
@@ -2266,6 +2295,9 @@ rb\_str\_replace(str, str2)  
RSTRING(str)-\>aux.shared = RSTRING(str2)-\>aux.shared;  
}

- else if (!RSTRING(str2)-\>len) {
- FL\_SET(str, ELTS\_SHARED);
- RSTRING(str)-\>ptr = null\_str;
- }  
else {

- rb\_str\_modify(str);  
rb\_str\_resize(str, RSTRING(str2)-\>len);  
memcpy(RSTRING(str)-\>ptr, RSTRING(str2)-\>ptr, RSTRING(str2)-\>len);

---

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 20, 2007, 4:19pm UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/6 "2007-09-20T16:19:36Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:31800] Re: RSTRING(value)-\>ptr == NULL ?”  
on Thu, 20 Sep 2007 14:12:43 +0900, Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|[ruby-core:1177] e$B$G;w$?;XE&$,$5$l$F$$$^$9!#$=$N%9%l%C%I$K$\*e(B  
|e$B$$$F$^$D$b$H$5$s$Oe(B [ruby-core:1185] e$B$Ge(B 1.8.0 e$B$K$O6uJ8;zNs$Ge(B  
|e$B$be(B ptr e$B$Oe(B “” e$B$r;X$9$h$&$K$9$k$HH/8@$7$F$$$^$9!#e(B

e$B$“!\<!”$=$&$$$($P$=$&$@$C$?$h$&$Je(B(e$BCQe(B

|e$B$J$\*!“e(B[ruby-core:1185] e$B$He(B [ruby-dev:31778] e$B$NH/8@$K$O?)$$0ce(B  
|e$B$$$,$”$j$^$9$,!“$h$/$”$k$3$H$G$9!#;d$N?dB,$H$7$F$O!“e(BNULL e$B$Ke(B  
|e$B$J$C$F$$$k$N$OC1$J$k=$@51L$l$G$”$k2DG=@-$,9b$$$H;W$$$^$9!#e(B

e$BCfED$5$s$Ke(B[ruby-dev:31800]e$B$N%Q%C%A$rEv$F$F$b$i$$$^$7$g$&!#e(B  
e$B$\*4j$$$7$^$9e(B e$B!de(B e$BCfED$5$se(B

---

<div class="post-metadata">

**Author:** ![Tietew](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/b77776/32.png) [@Tietew](https://www.ruby-forum.com/u/Tietew)\
**Post date:** [September 23, 2007, 10:26am UTC](https://www.ruby-forum.com/t/rstring-value-ptr-null/114316/7 "2007-09-23T10:26:58Z")

</div>

e$BKNIt$G$9!#e(B

Nobuyoshi N. wrote:

> +static const char null\_str[] = “”;  
> +#define null\_str (char \*)null\_str

rb\_str\_replacee$B$G$3$$$D$re(Brealloce$B$7$h$&$H$7$FMn$A$^$9!#e(B
