# \[Bug #674\] Failure: test\_aset(TestSDBM)

**URL:** <https://www.ruby-forum.com/t/bug-674-failure-test-aset-testsdbm/151464>\
**Category:** Development\
**Created:** [October 21, 2008, 9:29pm UTC](https://www.ruby-forum.com/t/bug-674-failure-test-aset-testsdbm/151464 "2008-10-21T21:29:45Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [October 21, 2008, 9:29pm UTC](https://www.ruby-forum.com/t/bug-674-failure-test-aset-testsdbm/151464/1 "2008-10-21T21:29:45Z")

</div>

Bug #674: Failure: test\_aset(TestSDBM)  
[http://redmine.ruby-lang.org/issues/show/674](http://redmine.ruby-lang.org/issues/show/674)

e$B5/I\<\<Te(B: Kazuhiro NISHIYAMA  
e$B%9%F!\<%?%9e(B: Open, e$BM%@hEYe(B: Normal  
e$B%+%F%4%je(B: core

1. Failure:  
test\_aset(TestSDBM) […/trunk/test/sdbm/test\_sdbm.rb:174]:  
\<“”\> expected but was  
\<“barbarfoo”\>.  
e$B$K$D$$$FD4$Y$F$\_$^$7$?!#e(B

ext/sdbm/init.ce$B$Ne(Bfsdbm\_fetche$B$Ne(B  
return rb\_external\_str\_new(value.dptr, value.dsize);  
e$B$Ge(Bvalue = {dptr = “barbarfoo”, dsize = 0}e$B$H$J$C$F$$$F!"e(B  
lene$B$Ke(B0e$B$r;XDj$7$F$$$k$N$Ke(Bstring.ce$B$Ne(Brb\_external\_str\_new\_with\_ence$B$,e(B  
if (len == 0 && ptr) len = strlen(ptr);  
e$B$Ge(Blene$B$rL5;k$7$Fe(Bstrlene$B$7$F$7$^$C$F$$$k$N$,860x$N$h$&$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [October 22, 2008, 5:15am UTC](https://www.ruby-forum.com/t/bug-674-failure-test-aset-testsdbm/151464/2 "2008-10-22T05:15:21Z")

</div>

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

At Wed, 22 Oct 2008 03:16:57 +0900,  
Kazuhiro NISHIYAMA wrote in [ruby-dev:36854]:

> ext/sdbm/init.ce$B$Ne(Bfsdbm\_fetche$B$Ne(B  
> return rb\_external\_str\_new(value.dptr, value.dsize);  
> e$B$Ge(Bvalue = {dptr = “barbarfoo”, dsize = 0}e$B$H$J$C$F$$$F!"e(B  
> lene$B$Ke(B0e$B$r;XDj$7$F$$$k$N$Ke(Bstring.ce$B$Ne(Brb\_external\_str\_new\_with\_ence$B$,e(B  
> if (len == 0 && ptr) len = strlen(ptr);  
> e$B$Ge(Blene$B$rL5;k$7$Fe(Bstrlene$B$7$F$7$^$C$F$$$k$N$,860x$N$h$&$G$9!#e(B

e$B$^$@e(Blen==0e$B$r;XDj$7$Fe(Brb\_external\_str\_new\_with\_enc()e$B$r8F$V%3!\<%I$Oe(B  
e$B$J$$$h$&$G$9$7!“e(Brb\_{external,locale}\_str\_new()e$B$r$=$l$\>$lFs$D$KJ,e(B  
e$B$1$?$[$&$,$$$$$s$8$c$J$$$G$7$g$&$+!#$”$k$$$O!"@5$7$$CM$H$7$F$"$je(B  
e$B$&$ke(B0e$B$8$c$J$/$Fe(B-1e$B$"$?$j$K$9$k$H$+!#e(B

# Index: include/ruby/intern.h

— include/ruby/intern.h (revision 19872)  
+++ include/ruby/intern.h (working copy)  
@@ -549,5 +549,7 @@ VALUE rb\_tainted\_str\_new(const char\*, lo  
VALUE rb\_tainted\_str\_new2(const char\*);  
VALUE rb\_external\_str\_new(const char\*, long);  
+VALUE rb\_external\_str\_new\_cstr(const char\*);  
VALUE rb\_locale\_str\_new(const char\*, long);  
+VALUE rb\_locale\_str\_new\_cstr(const char\*);  
VALUE rb\_str\_buf\_new(long);  
VALUE rb\_str\_buf\_new\_cstr(const char\*);  
@@ -620,4 +622,16 @@ size\_t rb\_str\_capacity(VALUE);  
rb\_usascii\_str\_new\_cstr(str);   
})  
+#define rb\_external\_str\_new\_cstr(str) **extension** (   
+{ \

- (\_\_builtin\_constant\_p(str)) ? \
- rb\_external\_str\_new(str, strlen(str)) : \
- rb\_external\_str\_new\_cstr(str);   
+})  
+#define rb\_locale\_str\_new\_cstr(str) **extension** (   
+{ \
- (\_\_builtin\_constant\_p(str)) ? \
- rb\_locale\_str\_new(str, strlen(str)) : \
- rb\_locale\_str\_new\_cstr(str);   
+})  
#define rb\_str\_buf\_new\_cstr(str) **extension** (   
{   
Index: string.c  
===================================================================  
— string.c (revision 19872)  
+++ string.c (working copy)  
@@ -29,4 +29,6 @@  
#undef rb\_tainted\_str\_new\_cstr  
#undef rb\_usascii\_str\_new\_cstr  
+#undef rb\_external\_str\_new\_cstr  
+#undef rb\_locale\_str\_new\_cstr  
#undef rb\_str\_new2  
#undef rb\_str\_new3  
@@ -529,5 +531,4 @@ rb\_external\_str\_new\_with\_enc(const char  
VALUE str;

- if (len == 0 && !ptr) len = strlen(ptr);  
str = rb\_tainted\_str\_new(ptr, len);  
rb\_enc\_associate(str, eenc);  
@@ -542,4 +543,11 @@ rb\_external\_str\_new(const char \*ptr, lon

VALUE  
+rb\_external\_str\_new\_cstr(const char \*ptr)  
+{

- long len = ptr ? strlen(ptr) : 0;
- return rb\_external\_str\_new\_with\_enc(ptr, len,  
rb\_default\_external\_encoding());  
+}
- 

+VALUE  
rb\_locale\_str\_new(const char \*ptr, long len)  
{  
@@ -548,4 +556,11 @@ rb\_locale\_str\_new(const char \*ptr, long

VALUE  
+rb\_locale\_str\_new\_cstr(const char \*ptr)  
+{

- long len = ptr ? strlen(ptr) : 0;
- return rb\_external\_str\_new\_with\_enc(ptr, len,  
rb\_locale\_encoding());  
+}
- 

+VALUE  
rb\_str\_export(VALUE str)  
{

---

<div class="post-metadata">

**Author:** ![Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/77aa72/32.png) [@Kazuhiro\_NISHIYAMA](https://www.ruby-forum.com/u/Kazuhiro_NISHIYAMA)\
**Post date:** [October 22, 2008, 7:57am UTC](https://www.ruby-forum.com/t/bug-674-failure-test-aset-testsdbm/151464/3 "2008-10-22T07:57:23Z")

</div>

e$B%A%1%C%He(B #674 e$B$,99?7$5$l$^$7$?!#e(B (by Yukihiro M.)

e$B%9%F!\<%?%9e(B Opene$B$+$ie(BClosede$B$KJQ99e(B  
e$B?JD=e(B % 0e$B$+$ie(B100e$B$KJQ99e(B

## Applied in changeset r19885.

[http://redmine.ruby-lang.org/issues/show/674](http://redmine.ruby-lang.org/issues/show/674)
