Forum: Ruby-dev [ruby-trunk - Bug #7301][Open] URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。

Posted by shi-mo (Yoshifumi Shimono) (Guest)
on 2012-11-07 10:35
(Received via mailing list)
Issue #7301 has been reported by shi-mo (Yoshifumi Shimono).

----------------------------------------
Bug #7301: URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。
https://bugs.ruby-lang.org/issues/7301

Author: shi-mo (Yoshifumi Shimono)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:
ruby -v: ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]


URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。

----------------------------
$ cat nil-typecode.rb
# encoding: utf-8

require 'uri'

URI::FTP.new2('anonymous', 'anonymous', 'ftp.ubuntu.com', 21, '/')
$ ruby -v nil-typecode.rb
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:58:in 
`new2': undefined method `size' for nil:NilClass (NoMethodError)
  from nil-typecode.rb:5:in `<main>'
$
Posted by mame (Yusuke Endoh) (Guest)
on 2012-11-07 16:44
(Received via mailing list)
Issue #7301 has been updated by mame (Yusuke Endoh).

Status changed from Open to Assigned
Assignee set to mame (Yusuke Endoh)
Target version set to 2.0.0

報告ありがとうございます。
生まれてから 10 年以上このままだったっぽいですね。このメソッド本当に必要なのか?
とりあえず最低限と思われるパッチを入れておきます。

diff --git a/lib/uri/ftp.rb b/lib/uri/ftp.rb
index 971684a..6cb9782 100644
--- a/lib/uri/ftp.rb
+++ b/lib/uri/ftp.rb
@@ -54,7 +54,7 @@ module URI
     # Arguments are user, password, host, port, path, typecode,
     # and arg_check, in that order.
     def self.new2(user, password, host, port, path,
-                  typecode = nil, arg_check = true)
+                  typecode = "", arg_check = true)
       typecode = nil if typecode.size == 0
       if typecode && !TYPECODE.include?(typecode)
         raise ArgumentError,

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Bug #7301: URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。
https://bugs.ruby-lang.org/issues/7301#change-32573

Author: shi-mo (Yoshifumi Shimono)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category:
Target version: 2.0.0
ruby -v: ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]


URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。

----------------------------
$ cat nil-typecode.rb
# encoding: utf-8

require 'uri'

URI::FTP.new2('anonymous', 'anonymous', 'ftp.ubuntu.com', 21, '/')
$ ruby -v nil-typecode.rb
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:58:in 
`new2': undefined method `size' for nil:NilClass (NoMethodError)
  from nil-typecode.rb:5:in `<main>'
$
Posted by shi-mo (Yoshifumi Shimono) (Guest)
on 2012-11-14 11:38
(Received via mailing list)
Issue #7301 has been updated by shi-mo (Yoshifumi Shimono).

File new2_with_typecode.rb added

後から気付いたのですが、引数typecodeを与えても例外が発生します。

----------------------------
$ cat new2_with_typecode.rb
# encoding: utf-8

require 'uri'

URI::FTP.new2('anonymous', 'anonymous', 'ftp.ubuntu.com', 21, '/', 'a')
$ ruby -v new2_with_typecode.rb
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/generic.rb:557:in 
`split_userinfo': undefined method `split' for ["anonymous", 
"anonymous"]:Array (NoMethodError)
  from 
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/generic.rb:524:in 
`set_userinfo'
  from 
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/generic.rb:203:in 
`initialize'
  from 
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:140:in 
`initialize'
  from 
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:66:in 
`new'
  from 
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:66:in 
`new2'
  from new2_with_typecode.rb:5:in `<main>'
$
----------------------------

引数user,passwordの与え方は間違っていないと思うのですが、いかがでしょうか。
----------------------------------------
Bug #7301: URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。
https://bugs.ruby-lang.org/issues/7301#change-32898

Author: shi-mo (Yoshifumi Shimono)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category:
Target version: 2.0.0
ruby -v: ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]


URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。

----------------------------
$ cat nil-typecode.rb
# encoding: utf-8

require 'uri'

URI::FTP.new2('anonymous', 'anonymous', 'ftp.ubuntu.com', 21, '/')
$ ruby -v nil-typecode.rb
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:58:in 
`new2': undefined method `size' for nil:NilClass (NoMethodError)
  from nil-typecode.rb:5:in `<main>'
$
Posted by mame (Yusuke Endoh) (Guest)
on 2012-11-14 11:49
(Received via mailing list)
Issue #7301 has been updated by mame (Yusuke Endoh).


これはダメですね。泥沼化しそうなので、手を入れるべきでないと判断します。

メンテナの YAMADA Akira さん見ていらっしゃいますかね。
返事がなければ、ドキュメントを消して undocumented なメソッドにすることで消極的に解決しようと思います。

--
Yusuke Endoh <mame@tsg.ne.jp>
----------------------------------------
Bug #7301: URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。
https://bugs.ruby-lang.org/issues/7301#change-32899

Author: shi-mo (Yoshifumi Shimono)
Status: Assigned
Priority: Normal
Assignee: mame (Yusuke Endoh)
Category:
Target version: 2.0.0
ruby -v: ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]


URI::FTP.new2()の引数typecodeを省略するとNoMethodErrorが発生します。

----------------------------
$ cat nil-typecode.rb
# encoding: utf-8

require 'uri'

URI::FTP.new2('anonymous', 'anonymous', 'ftp.ubuntu.com', 21, '/')
$ ruby -v nil-typecode.rb
ruby 1.9.3p286 (2012-10-12 revision 37165) [i686-linux]
/home/shimono/.rbenv/versions/1.9.3-p286/lib/ruby/1.9.1/uri/ftp.rb:58:in 
`new2': undefined method `size' for nil:NilClass (NoMethodError)
  from nil-typecode.rb:5:in `<main>'
$
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.