[前][次][番号順一覧][スレッド一覧]

ruby-changes:18068

From: naruse <ko1@a...>
Date: Mon, 6 Dec 2010 09:35:29 +0900 (JST)
Subject: [ruby-changes:18068] Ruby:r30089 (trunk): * lib/uri/common.rb (URI::Parser#initialize_pattern):

naruse	2010-12-06 09:19:28 +0900 (Mon, 06 Dec 2010)

  New Revision: 30089

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30089

  Log:
    * lib/uri/common.rb (URI::Parser#initialize_pattern):
      workaround fix pattern of hostname for RFC 3986. [ruby-dev:42672]

  Modified files:
    trunk/ChangeLog
    trunk/lib/uri/common.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 30088)
+++ ChangeLog	(revision 30089)
@@ -1,3 +1,8 @@
+Mon Dec  6 09:16:46 2010  NARUSE, Yui  <naruse@r...>
+
+	* lib/uri/common.rb (URI::Parser#initialize_pattern):
+	  workaround fix pattern of hostname for RFC 3986. [ruby-dev:42672]
+
 Mon Dec  6 09:14:38 2010  NARUSE, Yui  <naruse@r...>
 
 	* lib/mkmf.rb (check_signedness): rename unused variable prelude.
Index: lib/uri/common.rb
===================================================================
--- lib/uri/common.rb	(revision 30088)
+++ lib/uri/common.rb	(revision 30089)
@@ -31,7 +31,7 @@
       # mark          = "-" | "_" | "." | "!" | "~" | "*" | "'" |
       #                 "(" | ")"
       # unreserved    = alphanum | mark
-      UNRESERVED = "-_.!~*'()#{ALNUM}"
+      UNRESERVED = "\\-_.!~*'()#{ALNUM}"
       # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
       #                 "$" | ","
       # reserved      = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" |
@@ -239,8 +239,8 @@
       ret[:ESCAPED] = escaped = (opts.delete(:ESCAPED) || PATTERN::ESCAPED)
       ret[:UNRESERVED] = unreserved = opts.delete(:UNRESERVED) || PATTERN::UNRESERVED
       ret[:RESERVED] = reserved = opts.delete(:RESERVED) || PATTERN::RESERVED
-      ret[:DOMLABEL] = domlabel = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
-      ret[:TOPLABEL] = toplabel = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
+      ret[:DOMLABEL] = opts.delete(:DOMLABEL) || PATTERN::DOMLABEL
+      ret[:TOPLABEL] = opts.delete(:TOPLABEL) || PATTERN::TOPLABEL
       ret[:HOSTNAME] = hostname = opts.delete(:HOSTNAME)
 
       # RFC 2396 (URI Generic Syntax)
@@ -258,8 +258,9 @@
       ret[:FRAGMENT] = fragment = "#{uric}*"
 
       # hostname      = *( domainlabel "." ) toplabel [ "." ]
+      # reg-name      = *( unreserved / pct-encoded / sub-delims ) # RFC3986
       unless hostname
-	ret[:HOSTNAME] = hostname = "(?:#{domlabel}\\.)*#{toplabel}\\.?"
+	ret[:HOSTNAME] = hostname = "(?:[a-zA-Z0-9\\-._~!$&'()*+,;=]|%\\h\\h)*"
       end
 
       # RFC 2373, APPENDIX B:
@@ -326,7 +327,7 @@
       ret[:REL_SEGMENT] = rel_segment = "(?:[#{unreserved};@&=+$,]|#{escaped})+"
 
       # scheme        = alpha *( alpha | digit | "+" | "-" | "." )
-      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][-+.#{PATTERN::ALPHA}\\d]*"
+      ret[:SCHEME] = scheme = "[#{PATTERN::ALPHA}][\\-+.#{PATTERN::ALPHA}\\d]*"
 
       # abs_path      = "/"  path_segments
       ret[:ABS_PATH] = abs_path = "/#{path_segments}"

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]