# $SAFE=4$B$N\>l9g$N(BReadline::HISTORY.each

**URL:** <https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742>\
**Category:** Development\
**Created:** [August 1, 2008, 5:51pm UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742 "2008-08-01T17:51:31Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Takao\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Takao\_K](https://www.ruby-forum.com/u/Takao_K)\
**Post date:** [August 1, 2008, 5:51pm UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742/1 "2008-08-01T17:51:31Z")

</div>

knu e$B$5$s$Xe(B

e$B9bHx9(\<#$G$9!#e(B

knu e$B$5$s$,e(B r16125 e$B$K$F!"e(B  
Readline::HISTORY.each e$B%a%=%C%I$r%V%m%C%/$J$7$G8F$S=P$7$?$H$-$K!"e(B  
Enumerable::Enumerator e$B$rJV$9$h$&$K=$@5$5$l$?$HG’\<1$7$F$$$^$9!#e(B  
e$B$=$N=$@5$Ge(B $SAFE e$B$,e(B 4 e$B$N\>l9g$G$b!"e(B  
each e$B%a%=%C%I$r8F$S=P$9$3$H$,$G$-$k$h$&$K$J$j$^$7$?!#e(B  
e$B$?$V$s!"e(B$SAFE e$B$,e(B 4 e$B$N\>l9g$O!“e(B  
each e$B%a%=%C%I$r8F$S=P$7$?;~E@$GNc30e(B SecurityError e$B$,e(B  
e$BH/@8$7$?$[$&$,$h$$$N$G$O$J$$$+$H;W$$!”%Q%C%A$r:n@.$7$^$7$?!#e(B  
knu e$B$5$s$K=$@5FbMF$r3NG’$$$?$@$-!“e(B  
e$BLdBj$,$J$$$h$&$G$”$l$P%3%\_%C%H$7$?$$$H9M$($F$$$^$9!#e(B  
e$B$$$+$,$G$7$g$&$+!#e(B

e$B$J$\*!"8=:_!"e(B$SAFE e$B$,e(B 4 e$B$N\>l9g$Ke(B  
each e$B%a%=%C%I$r%V%m%C%/$J$7$G8F$S=P$9$3$H$O$G$-$^$9$,!"e(B  
e$BJV$jCM$Ne(B Enumerable::Enumerator  
e$B$KBP$7$F%a%=%C%I8F$S=P$7$r$9$k$H!"e(B  
e$BNc30e(B SecurityError e$B$,H/@8$7$^$9!#e(B  
e$B$3$N$?$a!"Nc30$,H/@8$9$k%?%$%_%s%0$,CY$$$H$$$&$@$1$G!"e(B  
e$B\<B32$O$J$$$H9M$($F$$$^$9!#e(B

e$B0J2\<$NNc$G$O!"%Q%C%AE,MQ8e$Oe(B(1)e$B$GNc30$,H/@8$7!"e(B  
e$B%Q%C%AE,MQA0$Oe(B(2)e$B$GNc30$,H/@8$7$^$9!#e(B

require “readline”  
Readline::HISTORY.push(“a”, “b”, “c”)  
$SAFE = 4  
e = Readline::HISTORY.each # (1)  
e.each do |s| # (2)  
p s  
end

e$B0J\>e$G$9!#e(B

# ----- e$B$3$3$+$ie(B ----- Index: ext/readline/readline.c

— ext/readline/readline.c (revision 18314)  
+++ ext/readline/readline.c (working copy)  
@@ -640,9 +640,8 @@  
HIST\_ENTRY \*entry;  
int i;

- RETURN\_ENUMERATOR(self, 0, 0);
- rb\_secure(4);

- RETURN\_ENUMERATOR(self, 0, 0);  
for (i = 0; i \< history\_length; i++) {  
entry = history\_get(history\_get\_offset\_func(i));  
if (entry == NULL)  
Index: test/readline/test\_readline\_history.rb  
===================================================================  
— test/readline/test\_readline\_history.rb (revision 18314)  
+++ test/readline/test\_readline\_history.rb (working copy)  
@@ -48,6 +48,7 @@  
[“push”, [“s”]],  
[“pop”, []],  
[“shift”, []],
- 

```
  ["each", []],
  ["length", []],
  ["delete_at", [0]],
  ["clear", []],
```

---

<div class="post-metadata">

**Author:** ![Takao\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Takao\_K](https://www.ruby-forum.com/u/Takao_K)\
**Post date:** [August 2, 2008, 6:40pm UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742/2 "2008-08-02T18:40:32Z")

</div>

e$B@\>;3OB9-$G$9!#e(B

At Sat, 2 Aug 2008 00:50:00 +0900,  
Takao K. wrote:

> require “readline”  
> Readline::HISTORY.push(“a”, “b”, “c”)  
> $SAFE = 4  
> e = Readline::HISTORY.each # (1)  
> e.each do |s| # (2)  
> p s  
> end

require “readline”  
Readline::HISTORY.push(“a”, “b”, “c”)  
e = nil  
proc {  
$SAFE = 4  
e = Readline::HISTORY.each # (1)  
}.call  
e.each do |s| # (2)  
p s  
end

e$B$N$h$&$J\>l9g$N5sF0$,JQ$o$j$=$&$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![Takao\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Takao\_K](https://www.ruby-forum.com/u/Takao_K)\
**Post date:** [August 3, 2008, 7:13am UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742/3 "2008-08-03T07:13:15Z")

</div>

e$B9bHx9(\<#$G$9!#e(B

On 2008/08/03, at 1:38, Kazuhiro NISHIYAMA wrote:

> > e$B%Q%C%AE,MQA0$Oe(B(2)e$B$GNc30$,H/@8$7$^$9!#e(B  
> > Readline::HISTORY.push(“a”, “b”, “c”)  
> > e = nil  
> > proc {  
> > $SAFE = 4  
> > e = Readline::HISTORY.each # (1)  
> > }.call  
> > e.each do |s| # (2)  
> > p s  
> > end
> 
> e$B$N$h$&$J\>l9g$N5sF0$,JQ$o$j$=$&$G$9!#e(B

e$B$4;XE&$NDL$j$G$9$M!#e(B  
e$B%Q%C%AE,MQA0$O!"@\>;3$5$s$NNc$G$O%R%9%H%j$NMzNr$r\<hF@$G$-$F$7$^$$$^$9$M!#e(B

e$B85!9$NA0ED$5$s$,=q$+$l$?e(B Readline::HISTORY.each  
e$B%a%=%C%I$G$O!“e(B  
$SAFE=4 e$B$G$”$l$PNc30e(B SecurityError e$B$rH/@8$5$;$k$3$H$re(B  
e$B0U?^$5$l$F$$$?$N$G$O$J$$$+$H;W$$$^$9!#e(B  
knu e$B$5$s$,e(B Enumerable::Enumerator  
e$B$rJV$9$h$&$K=$@5$5$l$?$H$-$Ke(B  
e$B5sF0$,JQ$o$C$?$H9M$($i$l$^$9!#e(B  
e$B$D$^$j!"@\>;3$5$s$NNc$G!“e(B  
e$B%R%9%H%j$NMzNr$r\<hF@$G$-$k$3$H$O%P%0$N2DG=@-$,$”$j$^$9!#e(B

e$B;d$N=$@5$K$h$j!"85!9$Ne(B Readline::HISTORY.each e$B%a%=%C%I$Ne(B  
$SAFE=4 e$B$N$H$-$NA[DjDL$j$K$J$k$H9M$($F$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Takao\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Takao\_K](https://www.ruby-forum.com/u/Takao_K)\
**Post date:** [August 4, 2008, 9:39am UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742/4 "2008-08-04T09:39:07Z")

</div>

At Sat, 2 Aug 2008 00:50:00 +0900,  
Takao K. wrote:

> ã„ã‹ãŒã§ã—ã‚‡ã†ã‹ã€‚  
> ã€€ç¾åœ¨ã®ã¨ã“ã‚ã€åŒæ§˜ã®ãƒ¡ã‚½ãƒƒãƒ‰(å¤šæ•°)ã«é–¢ã—ã¦ã€å¼•æ•°ãƒã‚§ãƒƒã‚¯ãŠã‚ˆã³  
> $SAFE ãƒã‚§ãƒƒã‚¯ã‚’(Enumerator ç”Ÿæˆã®)å‰ã«è¡Œã†ã‹ã©ã†ã‹ã¯çµ±ä¸€ã•ã‚Œã¦  
> ã„ã¾ã›ã‚“ã€‚

ã€€ãƒ¡ã‚½ãƒƒãƒ‰å†’é ­ã¸ã® RETURN\_ENUMERATOR() ã®è¿½åŠ ã®ã¿ã§æ¸ˆã¾ã›ã‚‹ã“ã¨ã§  
ãŸã¾ãŸã¾å‘¼å‡ºæ™‚ãƒã‚§ãƒƒã‚¯(ç”Ÿæˆæ™‚ã¯ç„¡ãƒã‚§ãƒƒã‚¯)ã«ãªã£ã¦ã„ã‚‹ã‚‚ã®ãŒå¤šã„  
ã§ã™ãŒã€ãã“ã¯ã‚‚ã¡ã‚ã‚“å€‹åˆ¥ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®äº‹æƒ…ã§æ±ºã‚ã¦ã‚ˆã„ã§ã—ã‚‡ã†ã€‚  
ç‰¹ã«ã€å¼•æ•°ã®æ•°ã‚„åž‹ã®ãƒã‚§ãƒƒã‚¯ãªã©ã¯ç”Ÿæˆæ™‚ã«ã™ã‚‹ã®ãŒæœ›ã¾ã—ã„å ´åˆã‚‚  
å¤šã„ã¯ãšã§ã™ã€‚

ã€€ãŸã ã€ Enumerator è‡ªä½“ã¯çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ã§ã¯ãªãã€ enumerate ã™ã‚‹  
ãŸã‚ã®è£œåŠ©è£…ç½®ã«éŽãŽãªã„ã®ã§ã€æŒ™å‹•ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿å®Ÿè¡Œæ™‚ã«æ±ºå®šã•ã‚Œã‚‹  
ã®ãŒåŽŸå‰‡ã ã¨ã¯æ€ã£ã¦ã„ã¾ã™ã€‚

---

<div class="post-metadata">

**Author:** ![Takao\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Takao\_K](https://www.ruby-forum.com/u/Takao_K)\
**Post date:** [August 5, 2008, 2:57pm UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742/5 "2008-08-05T14:57:48Z")

</div>

e$B9bHx9(\<#$G$9!#e(B

On 2008/08/04, at 16:37, Akinori MUSHA wrote:

> e$B!!8=:\_$N$H$3$m!"F1MM$N%a%=%C%Ie(B(e$BB??te(B)e$B$K4X$7$F!"0z?t%A%’%C%/$\*$h$Se(B  
> $SAFE e$B%A%’%C%/$re(B(Enumerator e$B@8@.$Ne(B)e$BA0$K9T$&$+$I$&$+$OE}0l$5$l$Fe(B  
> e$B$$$^$;$s!#e(B
> 
> e$B!!%a%=%C%IKAF,$X$Ne(B RETURN\_ENUMERATOR() e$B$NDI2C$N$\_$G:Q$^$;$k$3$H$Ge(B  
> e$B$?$^$?$^8F=P;~%A%’%C%/e(B(e$B@8@.;~$OL5%A%’%C%/e(B)e$B$K$J$C$F$$$k$b$N$,B?$$e(B  
> e$B$G$9$,!"$=$3$O$b$A$m$s8DJL$N%a%=%C%I$N;v\>p$G7h$a$F$h$$$G$7$g$&!#e(B  
> e$BFC$K!"0z?t$N?t$d7?$N%A%’%C%/$J$I$O@8@.;~$K$9$k$N$,K\>$^$7$$\>l9g$be(B  
> e$BB?$$$O$:$G$9!#e(B

e$B$4@bL@$"$j$,$H$&$4$6$$$^$9!#e(B  
e$B\>u67$,J,$+$j$^$7$?!#e(B

> e$B!!$?$@!"e(B Enumerator e$B\<+BN$O\>uBV$r;}$D$b$N$G$O$J$/!"e(B enumerate e$B$9$ke(B  
> e$B$?$a$NJd=uAuCV$K2a$.$J$$$N$G!"5sF0$O%$%F%l!\<%?\<B9T;~$K7hDj$5$l$ke(B  
> e$B$N$,86B’$@$H$O;W$C$F$$$^$9!#e(B

e$B\>e5-$N86B’$K=\>$&$J$i$P!"e(BReadline::HISTORY.each e$B%a%=%C%I$O!"e(B  
e$B8=:\_$N5sF0$,NI$$$h$&$G$9$M!#;d$O\>e5-$N86B’$KG\<F@$7$^$7$?!#e(B  
e$B$H$$$&$3$H$G!"e(BReadline::HISTORY.each  
e$B%a%=%C%I$O=$@5$7$^$;$s!#e(B

e$B$J$\*!"\>e5-$N86B’$Oe(B knu e$B$5$s$N$_9M$($J$N$+!"e(B  
e$B$=$l$H$be(B ruby (e$B$N3+H/\<Te(B?)  
e$BA4BN$H$7$F$N$b$N$J$N$+$I$A$i$G$7$g$&$+$M!#e(B  
e$B:#8e!"3+H/$r$9$k\>e$GCN$C$F$_$$$?J}$,$h$$$H;W$C$?$N$G\<ALd$7$F$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Takao\_K](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/ad7895/32.png) [@Takao\_K](https://www.ruby-forum.com/u/Takao_K)\
**Post date:** [August 6, 2008, 1:04pm UTC](https://www.ruby-forum.com/t/safe-4-b-n-l9g-n-breadline-history-each/144742/6 "2008-08-06T13:04:04Z")

</div>

At Tue, 5 Aug 2008 21:54:54 +0900,  
Takao K. wrote:

> > ã€€ãŸã ã€ Enumerator è‡ªä½“ã¯çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ã§ã¯ãªãã€ enumerate ã™ã‚‹  
> > ãŸã‚ã®è£œåŠ©è£…ç½®ã«éŽãŽãªã„ã®ã§ã€æŒ™å‹•ã¯ã‚¤ãƒ†ãƒ¬ãƒ¼ã‚¿å®Ÿè¡Œæ™‚ã«æ±ºå®šã•ã‚Œã‚‹  
> > ã®ãŒåŽŸå‰‡ã ã¨ã¯æ€ã£ã¦ã„ã¾ã™ã€‚

ã€€çŠ¶æ…‹ã‚’æŒã¤ã‚‚ã®ã§ãªã„ã¨ã„ã†è¡¨ç¾ã¯æ­£ç¢ºã§ã¯ãªã‹ã£ãŸã§ã™ãŒã€è¦ã¯ã€  
å…ƒã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’ã‚ã‚Šã®ã¾ã¾åŒ…ã‚“ã§åˆ—æŒ™ã®è£œåŠ©ã‚’è¡Œã†ã‚‚ã®ã§ã€ä»£å…¥ç­‰  
ã›ãšã«ãã®å ´ã§ãƒ¡ã‚½ãƒƒãƒ‰ãƒã‚§ãƒ¼ãƒ³ã‚’ç¶šã‘ã¦ä½¿ã†ã‚ˆã†ãªä½¿ã„æ–¹ã‚’ä¸»ã«æƒ³å®š  
ã—ã¦ã„ã¾ã™ã€‚

ã€€ãŸã ã€ä¸€æ–¹ã§ã¯ã€Œã€Žåˆ—æŒ™ã ã‘ãŒã§ãã‚‹ä½•ã‹ã€ã«æŠ½è±¡åŒ–ã™ã‚‹å…¥ã‚Œç‰©ã€ã¨  
ã—ã¦ã®æ€§è³ªãŒã‚ã‚‹ã®ã‚‚ç¢ºã‹ã§ã€ãŸã¨ãˆã°ã€Œä½•ã‚‰ã‹ã®åˆ—æŒ™å­ã‚’å—ã‘å–ã‚‹ã€  
ãƒ¡ã‚½ãƒƒãƒ‰ã« Enumerator ã‚’æ¸¡ã™ã‚ˆã†ãªã‚±ãƒ¼ã‚¹ãŒæƒ³å®šã•ã‚Œã¾ã™ã€‚ã—ã‹ã—ã€  
ãã‚Œã‚’å—ã‘å–ã‚‹å´ã¯ã€(ã‚‚ã‚‰ã£ãŸã‚‚ã®ãŒ Enumerator ã ã£ãŸã¨ã—ã¦)ãã®  
ä¸­èº«ãŒä½•ã§ã©ã‚“ãªä¾‹å¤–ãŒèµ·ãå¾—ã‚‹ã®ã‹ã¨ã„ã†ã“ã¨ã¯åˆ†ã‹ã‚‰ãªã„(çŸ¥ã£ã¦  
ã„ã‚‹ã¹ãã§ã‚‚ãªã„)ã®ã§ã€ä¾‹å¤–ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã‚‚ã®ã¯å—ã‘æ¸¡ã—  
ã«ã¯é©ã•ãªã„ã¨æ€ã„ã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€å‘¼ã³å‡ºã—å´ãŒè²¬ä»»ã‚’ã‚‚ã£ã¦ä¾‹å¤–ã‚’  
æ•æ‰ã™ã‚‹ã®ãªã‚‰æ§‹ã„ã¾ã›ã‚“ãŒã€‚

> ä¸Šè¨˜ã®åŽŸå‰‡ã«å¾“ã†ãªã‚‰ã°ã€Readline::HISTORY.each ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€  
> ç¾åœ¨ã®æŒ™å‹•ãŒè‰¯ã„ã‚ˆã†ã§ã™ã­ã€‚ç§ã¯ä¸Šè¨˜ã®åŽŸå‰‡ã«ç´å¾—ã—ã¾ã—ãŸã€‚  
> ã¨ã„ã†ã“ã¨ã§ã€Readline::HISTORY.each ãƒ¡ã‚½ãƒƒãƒ‰ã¯ä¿®æ­£ã—ã¾ã›ã‚“ã€‚
> 
> ãªãŠã€ä¸Šè¨˜ã®åŽŸå‰‡ã¯ knu ã•ã‚“ã®ãŠè€ƒãˆãªã®ã‹ã€  
> ãã‚Œã¨ã‚‚ ruby (ã®é–‹ç™ºè€…?) å…¨ä½“ã¨ã—ã¦ã®ã‚‚ã®ãªã®ã‹ã©ã¡ã‚‰ã§ã—ã‚‡ã†ã‹ã­ã€‚  
> ä»Šå¾Œã€é–‹ç™ºã‚’ã™ã‚‹ä¸Šã§çŸ¥ã£ã¦ãŠã„ãŸæ–¹ãŒã‚ˆã„ã¨æ€ã£ãŸã®ã§è³ªå•ã—ã¦ã„ã¾ã™ã€‚

ã€€enumerator ã‚’ææ¡ˆã—ã¦æœ€åˆã®å®Ÿè£…ã‚’æ›¸ã„ãŸç§ã¯ãã†è¦‹ã¦ã„ã¾ã™ãŒã€  
é–‹ç™ºè€…å…¨ä½“ã®ã‚‚ã®ã‹ã¨ã„ã†ã¨åˆ†ã‹ã‚Šã¾ã›ã‚“ã€‚åˆ¥ã®ã‚ˆã‚Šä½¿ã„ã‚„ã™ã„æ–¹å‘ãŒ  
ç¤ºã•ã‚Œã‚Œã°ã€ãã¡ã‚‰ã«ã‚·ãƒ•ãƒˆã™ã‚Œã°ã„ã„ã¨æ€ã„ã¾ã™ã€‚
