# \[\].pack("P") $B$G(B SEGV

**URL:** <https://www.ruby-forum.com/t/pack-p-b-g-b-segv/101226>\
**Category:** Development\
**Created:** [August 3, 2006, 5:46pm UTC](https://www.ruby-forum.com/t/pack-p-b-g-b-segv/101226 "2006-08-03T17:46:26Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![rucila](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/35a633/32.png) [@rucila](https://www.ruby-forum.com/u/rucila)\
**Post date:** [August 3, 2006, 5:46pm UTC](https://www.ruby-forum.com/t/pack-p-b-g-b-segv/101226/1 "2006-08-03T17:46:26Z")

</div>

rucila ã¨ç?³ã?ã¾ã?ã??

Array#pack ã® “P” ã§é?å??ã®é?·ã?ã?è¶³ã??ãªã?æ??ã« SEGV ã?ç?ºç??ã?ã??ã?ã¨ã?  
ã?ã??ã¾ã?ã??  
ç?°å¢?ã??ã?¹ã?¯ã?ªã??ã??ã«ã??ã£ã¦ã¯å?¥ã®ã?¨ã?©ã?¼ã?ç?ºç??ã?ã¾ã?ã?ã?  
ã?¨ã?©ã?¼å??å®¹ã? “too few argument” ã§ãªã?ã??ã®ã«ãªã??ã¾ã?ã??

% ruby -v  
ruby 1.8.4 (2005-12-24) [i686-linux]  
% ruby  
[].pack(“P”)  
-:1:in `pack’: can’t convert false into String (TypeError)  
from -:1

ã?ã¶ã??ã?ã?ã ã¨æ?ã?ã¾ã?ã??

# Index: pack.c

RCS file: /src/ruby/pack.c,v  
retrieving revision 1.86  
diff -u -r1.86 pack.c  
— pack.c 18 Jul 2006 07:02:35 -0000 1.86  
+++ pack.c 3 Aug 2006 15:20:28 -0000  
@@ -454,7 +454,7 @@  
items = RARRAY(ary)-\>len;  
idx = 0;

-#define THISFROM RARRAY(ary)-\>ptr[idx]  
+#define THISFROM (items \> 0 ? RARRAY(ary)-\>ptr[idx] :  
(rb\_raise(rb\_eArgError, toofew), 0))  
#define NEXTFROM (items-- \> 0 ? RARRAY(ary)-\>ptr[idx++] :  
(rb\_raise(rb\_eArgError, “too few arguments”),0))

```
   while (p < pend) {
```

---

<div class="post-metadata">

**Author:** ![rucila](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/35a633/32.png) [@rucila](https://www.ruby-forum.com/u/rucila)\
**Post date:** [August 3, 2006, 6:19pm UTC](https://www.ruby-forum.com/t/pack-p-b-g-b-segv/101226/2 "2006-08-03T18:19:29Z")

</div>

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

At Fri, 4 Aug 2006 00:44:49 +0900,  
rucila wrote in [ruby-dev:29182]:

> -#define THISFROM RARRAY(ary)-\>ptr[idx]  
> +#define THISFROM (items \> 0 ? RARRAY(ary)-\>ptr[idx] : (rb\_raise(rb\_eArgError, toofew), 0))  
> #define NEXTFROM (items-- \> 0 ? RARRAY(ary)-\>ptr[idx++] : (rb\_raise(rb\_eArgError, “too few arguments”),0))

toofewe$B$,L$Dj5A$G$9!#e(B

# Index: pack.c

RCS file: /cvs/ruby/src/ruby/pack.c,v  
retrieving revision 1.86  
diff -p -U 2 -r1.86 pack.c  
— pack.c 18 Jul 2006 07:02:35 -0000 1.86  
+++ pack.c 3 Aug 2006 16:13:00 -0000  
@@ -455,6 +455,7 @@ pack\_pack(VALUE ary, VALUE fmt)  
idx = 0;

-#define THISFROM RARRAY(ary)-\>ptr[idx]  
-#define NEXTFROM (items-- \> 0 ? RARRAY(ary)-\>ptr[idx++] :  
(rb\_raise(rb\_eArgError, “too few arguments”),0))  
+#define TOO\_FEW (rb\_raise(rb\_eArgError, “too few arguments”), 0)  
+#define THISFROM (items \> 0 ? RARRAY(ary)-\>ptr[idx] : TOO\_FEW)  
+#define NEXTFROM (items-- \> 0 ? RARRAY(ary)-\>ptr[idx++] : TOO\_FEW)

```
 while (p < pend) {
```

---

<div class="post-metadata">

**Author:** ![rucila](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/35a633/32.png) [@rucila](https://www.ruby-forum.com/u/rucila)\
**Post date:** [August 3, 2006, 10:17pm UTC](https://www.ruby-forum.com/t/pack-p-b-g-b-segv/101226/3 "2006-08-03T22:17:22Z")

</div>

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

In message “Re: [ruby-dev:29183] Re: [].pack(“P”) e$B$Ge(B SEGV”  
on Fri, 4 Aug 2006 01:18:03 +0900, removed\_email\_address@domain.invalid writes:

|At Fri, 4 Aug 2006 00:44:49 +0900,  
|rucila wrote in [ruby-dev:29182]:  
|\> -#define THISFROM RARRAY(ary)-\>ptr[idx]  
|\> +#define THISFROM (items \> 0 ? RARRAY(ary)-\>ptr[idx] : (rb\_raise(rb\_eArgError, toofew), 0))  
|\> #define NEXTFROM (items-- \> 0 ? RARRAY(ary)-\>ptr[idx++] : (rb\_raise(rb\_eArgError, “too few arguments”),0))  
|  
|toofewe$B$,L$Dj5A$G$9!#e(B

e$B%3%\_%C%H$7$F$/$@$5$$!#e(B
