[#31927] Re: Problem with Ruby 1.8.6-p110 on DragonFly (was [PATCH] Problem with ruby 1.8.6-p36 (and p39) on Tiger) — Takahiro Kambe <taca@...>
こんばんは。
[#31928] securerandom.rb for 1.8 — Tanaka Akira <akr@...>
securerandom.rb を 1.8 に追加し、cgi/session.rb に使わせたい
At Wed, 3 Oct 2007 12:49:20 +0900,
In article <86k5pwinco.knu@iDaemons.org>,
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
[#31936] Rake添付 — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
-----BEGIN PGP SIGNED MESSAGE-----
まつもと ゆきひろです
Yukihiro Matsumoto さんは書きました:
-----BEGIN PGP SIGNED MESSAGE-----
NAKAMURA, Hiroshi さんは書きました:
At Wed, 10 Oct 2007 16:46:01 +0900,
-----BEGIN PGP SIGNED MESSAGE-----
[#31941] Re: [ruby-list:44071] Re: Ruby 1.8.6-p111 / 1.8.5-p114 released (Security Fix) — Shugo Maeda <shugo@...>
前田です。
-----BEGIN PGP SIGNED MESSAGE-----
前田です。
-----BEGIN PGP SIGNED MESSAGE-----
前田です。
In message <47063403.3070402@ruby-lang.org>,
In message <20071006.101915.596518898.gotoyuzo@sawara.priv.tokyo.netlab.jp>,
前田です。
In message <4709852A.1020606@ruby-lang.org>,
-----BEGIN PGP SIGNED MESSAGE-----
In message <470D9227.9090008@sarion.co.jp>,
-----BEGIN PGP SIGNED MESSAGE-----
[#31959] pcc: constant too big for cross-compiler — "NARUSE, Yui" <naruse@...>
成瀬です。
In article <470884D1.9040401@airemix.com>,
[#31980] multibyte string/regex literal with escape sequence — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
こんにちは、なかむら(う)です。
まつもと ゆきひろです
成瀬です。
こんにちは、なかむら(う)です。
In article <20071010091006.1988.USA@garbagecollect.jp>,
成瀬です。
In article <471003CB.7060701@airemix.com>,
成瀬です。
[#32049] Re: iconv enhancement in Ruby 1.9 — Nobuyoshi Nakada <nobu@...>
なかだです。
[#32133] undefined method `now' for DateTime:Class (NoMethodError) — "NAKAMURA, Hiroshi" <nakahiro@...>
-----BEGIN PGP SIGNED MESSAGE-----
どういう状況かよくわかってないのですが、いっそ必ず date 丸ごと読むようにするか、
-----BEGIN PGP SIGNED MESSAGE-----
> もしかして、単にtime.rbの「require 'parsedate'」を削ればいいだけだったり
-----BEGIN PGP SIGNED MESSAGE-----
> 確かに。で、1.9でparsedate.rbがなくなることを考えると、とりあえずtime.rb
In article <4b1598ce0710231835p1a0b3040kcc89bf0017a60c21@mail.gmail.com>,
[ruby-dev:31980] multibyte string/regex literal with escape sequence
こんにちは、なかむら(う)です。
trunkで、
% ./miniruby -ve '# -*- coding: EUC-JP -*-
p "あ\n".encoding'
ruby 1.9.0 (2007-10-07 patchlevel 0) [i386-netbsdelf]
"US-ASCII"
となることに気付きました。
文字列リテラルあるいは正規表現リテラルにエスケープシーケンス
を含めると問答無用でUS-ASCII(というか実際はバイナリ扱い?)にな
るようです。
おそらく、意図としては、\nnnとか\xnnとか\M-xとかで8bit目が立
ってる文字を仕込んじゃったらもう正体不明だということにしたい
のだろうと思うので、真面目にチェックするようにしてみました。
* parse.y (parser_read_escape, parser_tokadd_escape): check code range.
Index: parse.y
===================================================================
--- parse.y (revision 13660)
+++ parse.y (working copy)
@@ -4491,8 +4491,8 @@ static int parser_here_document(struct p
# define pushback(c) parser_pushback(parser, c)
# define newtok() parser_newtok(parser)
# define tokadd(c) parser_tokadd(parser, c)
-# define read_escape() parser_read_escape(parser)
-# define tokadd_escape(t) parser_tokadd_escape(parser, t)
+# define read_escape(m) parser_read_escape(parser, m)
+# define tokadd_escape(t,m) parser_tokadd_escape(parser, t, m)
# define regx_options() parser_regx_options(parser)
# define tokadd_string(f,t,p,n,m) parser_tokadd_string(parser,f,t,p,n,m)
# define parse_string(n) parser_parse_string(parser,n)
@@ -4920,7 +4920,7 @@ parser_tokadd(struct parser_params *pars
}
static int
-parser_read_escape(struct parser_params *parser)
+parser_read_escape(struct parser_params *parser, int *mb)
{
int c;
@@ -4958,6 +4958,7 @@ parser_read_escape(struct parser_params
c = scan_oct(lex_p, 3, &numlen);
lex_p += numlen;
}
+ if (mb && (c >= 0200)) *mb = ENC_CODERANGE_UNKNOWN;
return c;
case 'x': /* hex constant */
@@ -4971,6 +4972,7 @@ parser_read_escape(struct parser_params
}
lex_p += numlen;
}
+ if (mb && (c >= 0x80)) *mb = ENC_CODERANGE_UNKNOWN;
return c;
case 'b': /* backspace */
@@ -4986,10 +4988,12 @@ parser_read_escape(struct parser_params
return '\0';
}
if ((c = nextc()) == '\\') {
- return read_escape() | 0x80;
+ if (mb) *mb = ENC_CODERANGE_UNKNOWN;
+ return read_escape(0) | 0x80;
}
else if (c == -1) goto eof;
else {
+ if (mb) *mb = ENC_CODERANGE_UNKNOWN;
return ((c & 0xff) | 0x80);
}
@@ -5001,7 +5005,7 @@ parser_read_escape(struct parser_params
}
case 'c':
if ((c = nextc())== '\\') {
- c = read_escape();
+ c = read_escape(mb);
}
else if (c == '?')
return 0177;
@@ -5019,7 +5023,7 @@ parser_read_escape(struct parser_params
}
static int
-parser_tokadd_escape(struct parser_params *parser, int term)
+parser_tokadd_escape(struct parser_params *parser, int term, int *mb)
{
int c;
@@ -5030,35 +5034,37 @@ parser_tokadd_escape(struct parser_param
case '0': case '1': case '2': case '3': /* octal constant */
case '4': case '5': case '6': case '7':
{
- int i;
+ int numlen;
+ int oct;
tokadd('\\');
- tokadd(c);
- for (i=0; i<2; i++) {
- c = nextc();
- if (c == -1) goto eof;
- if (c < '0' || '7' < c) {
- pushback(c);
- break;
- }
- tokadd(c);
+ pushback(c);
+ oct = scan_oct(lex_p, 3, &numlen);
+ if (numlen == 0) {
+ yyerror("Invalid escape character syntax");
+ return -1;
}
+ while (numlen--)
+ tokadd(nextc());
+ if (mb && (oct >= 0200)) *mb = ENC_CODERANGE_UNKNOWN;
}
return 0;
case 'x': /* hex constant */
{
int numlen;
+ int hex;
tokadd('\\');
tokadd(c);
- scan_hex(lex_p, 2, &numlen);
+ hex = scan_hex(lex_p, 2, &numlen);
if (numlen == 0) {
yyerror("Invalid escape character syntax");
return -1;
}
while (numlen--)
tokadd(nextc());
+ if (mb && (hex >= 0x80)) *mb = ENC_CODERANGE_UNKNOWN;
}
return 0;
@@ -5069,6 +5075,7 @@ parser_tokadd_escape(struct parser_param
return 0;
}
tokadd('\\'); tokadd('M'); tokadd('-');
+ if (mb) *mb = ENC_CODERANGE_UNKNOWN;
goto escaped;
case 'C':
@@ -5084,7 +5091,7 @@ parser_tokadd_escape(struct parser_param
tokadd('\\'); tokadd('c');
escaped:
if ((c = nextc()) == '\\') {
- return tokadd_escape(term);
+ return tokadd_escape(term, mb);
}
else if (c == -1) goto eof;
tokadd(c);
@@ -5212,22 +5219,14 @@ parser_tokadd_string(struct parser_param
default:
if (func & STR_FUNC_REGEXP) {
pushback(c);
- if (tokadd_escape(term) < 0)
+ if (tokadd_escape(term, mb) < 0)
return -1;
- if (mb) {
- *mb = ENC_CODERANGE_UNKNOWN;
- mb = 0;
- }
continue;
}
else if (func & STR_FUNC_EXPAND) {
pushback(c);
if (func & STR_FUNC_ESCAPE) tokadd('\\');
- c = read_escape();
- if (mb) {
- *mb = ENC_CODERANGE_UNKNOWN;
- mb = 0;
- }
+ c = read_escape(mb);
}
else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
/* ignore backslashed spaces in %w */
@@ -6043,7 +6042,7 @@ parser_yylex(struct parser_params *parse
goto ternary;
}
else if (c == '\\') {
- c = read_escape();
+ c = read_escape(0);
tokadd(c);
}
else {
それでは。
--
U.Nakamura <usa@garbagecollect.jp>