# Str\_new() may create broken string

**URL:** <https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941>\
**Category:** Development\
**Created:** [April 16, 2008, 1:50pm UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941 "2008-04-16T13:50:51Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 16, 2008, 1:50pm UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941/1 "2008-04-16T13:50:51Z")

</div>

e$B%o%J%Y$H?=$7$^$9!#e(B

str\_new e$B4X?t$G:n$i$l$?J8;zNs$N%P%$%HNs$,=i4|2=$5$l$F$$$J$$$?$a!“e(B  
e$B3F%(%s%3!\<%G%#%s%0$Ne(B mbc\_enc\_len  
e$B$J$I$,@5\>o$KF0$+$J$$\>l9g$,$”$j$^$9!#e(B  
e$B\<j85$N4D6-$G$O!"FC$Ke(B rb\_file\_expand\_path  
e$B$G$h$/5/$3$k$h$&$G$7$?!#e(B  
e$B0J2\<%Q%C%A$G$9!#e(B

# Index: string.c

— string.c (revision 15984)  
+++ string.c (working copy)  
@@ -371,6 +371,9 @@  
if (ptr) {  
memcpy(RSTRING\_PTR(str), ptr, len);  
}

- else {
- 

```
  MEMZERO(RSTRING_PTR(str), char, len);

```

- }  
STR\_SET\_LEN(str, len);  
RSTRING\_PTR(str)[len] = ‘\0’;  
return str;

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 17, 2008, 4:45am UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941/2 "2008-04-17T04:45:37Z")

</div>

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

At Wed, 16 Apr 2008 20:49:48 +0900,  
wanabe wrote in [ruby-dev:34430]:

> str\_new e$B4X?t$G:n$i$l$?J8;zNs$N%P%$%HNs$,=i4|2=$5$l$F$$$J$$$?$a!“e(B  
> e$B3F%(%s%3!\<%G%#%s%0$Ne(B mbc\_enc\_len e$B$J$I$,@5\>o$KF0$+$J$$\>l9g$,$”$j$^$9!#e(B  
> e$B\<j85$N4D6-$G$O!"FC$Ke(B rb\_file\_expand\_path e$B$G$h$/5/$3$k$h$&$G$7$?!#e(B

e$B@hF,e(B1bytee$B$r%/%j%"$9$k$@$1$G$OIT==J,$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 17, 2008, 6:36am UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941/3 "2008-04-17T06:36:38Z")

</div>

Nobuyoshi N.:

> e$B@hF,e(B1bytee$B$r%/%j%"$9$k$@$1$G$OIT==J,$G$7$g$&$+!#e(B

UTF16e$B$H$+$G$^$:$=$&$J5$$,$7$^$9$,!"$I$&$J$s$G$7$?$C$1!)e(B

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 17, 2008, 9:44am UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941/4 "2008-04-17T09:44:03Z")

</div>

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

At Thu, 17 Apr 2008 13:34:09 +0900,  
removed\_email\_address@domain.invalid wrote in [ruby-dev:34436]:

> > e$B@hF,e(B1bytee$B$r%/%j%"$9$k$@$1$G$OIT==J,$G$7$g$&$+!#e(B
> 
> UTF16e$B$H$+$G$^$:$=$&$J5$$,$7$^$9$,!"$I$&$J$s$G$7$?$C$1!)e(B

e$B$s$8$ce(B  
MEMZERO(RSTRING\_PTR(str), char, RSTRING\_EMBED\_LEN\_MAX+1);  
e$B$/$i$$$G!#e(B

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 17, 2008, 9:49am UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941/5 "2008-04-17T09:49:57Z")

</div>

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

> str\_new e$B4X?t$G:n$i$l$?J8;zNs$N%P%$%HNs$,=i4|2=$5$l$F$$$J$$$?$a!“e(B  
> e$B3F%(%s%3!\<%G%#%s%0$Ne(B mbc\_enc\_len e$B$J$I$,@5\>o$KF0$+$J$$\>l9g$,$”$j$^$9!#e(B  
> e$B\<j85$N4D6-$G$O!"FC$Ke(B rb\_file\_expand\_path e$B$G$h$/5/$3$k$h$&$G$7$?!#e(B  
> e$B0J2\<%Q%C%A$G$9!#e(B

e$BJ8;z$,$J$$$H$3$m$Ke(B mbc\_enc\_len e$B$rE,MQ$9$k$H$3$m$,$=$b$=$b$\*e(B  
e$B$+$7$$$H;W$&$s$G$9$,!"$I$&$$$&Nc$GH/@8$9$k$s$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![wanabe](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/w/51bf81/32.png) [@wanabe](https://www.ruby-forum.com/u/wanabe)\
**Post date:** [April 20, 2008, 1:55pm UTC](https://www.ruby-forum.com/t/str-new-may-create-broken-string/134941/6 "2008-04-20T13:55:09Z")

</div>

e$B%o%J%Y$G$9!#e(B

08/04/17 e$B$Ke(B Tanaka A.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) e$B$5$s$O=q$-$^$7$?e(B:

> e$BJ8;z$,$J$$$H$3$m$Ke(B mbc\_enc\_len e$B$rE,MQ$9$k$H$3$m$,$=$b$=$b$\*e(B  
> e$B$+$7$$$H;W$&$s$G$9$,!"$I$&$$$&Nc$GH/@8$9$k$s$G$7$g$&$+!#e(B

e$B3N$+$K$=$&$G$9$M!#LdBj$r40A4$K8+8m$C$F$$$^$7$?!#e(B  
str\_new()e$B$NLdBj$G$O$J$/!"e(Bfile\_expand\_path()e$BCf$Ge(B  
e$BJ8;zNsD9$,7h$^$kA0$Ke(Brb\_enc\_check()e$B$,8F$P$l$k$3$H$,LdBj$@$C$?$h$&$G$9!#e(B

e$B$5$i$K!"$3$NLdBj$O$9$G$K%j%S%8%g%se(B  
16018e$B$G=$@5$5$l$F$$$^$7$?!#e(B  
e$B%A%'%C%/$7B;$M$F$$$^$7$?!#$9$\_$^$;$s!#e(B  
e$B!J\<XB-$K$J$j$^$9$,!"0JA0$Oe(B sample/test.rb e$BCf$Ne(B  
File.expand\_path e$B$NJV$jCM$He(B  
e$B!!@55,I=8=$H$N%^%C%A%s%0ItJ,$Ge(B "broken Windows-31J  
string"e$B$H$J$C$F$$$^$7$?!#!Ke(B
