Bug #8979 » rubygems-remote_fetcher.patch
| lib/rubygems/remote_fetcher.rb | ||
|---|---|---|
| 
         response['content-length'].to_i 
   | 
||
| 
       end 
   | 
||
| 
       def escape_auth_info(str) 
   | 
||
| 
         str && URI.encode_www_form_component(str) 
   | 
||
| 
       end 
   | 
||
| 
       def unescape_auth_info(str) 
   | 
||
| 
         str && URI.decode_www_form_component(str) 
   | 
||
| 
       end 
   | 
||
| 
       def escape(str) 
   | 
||
| 
         return unless str 
   | 
||
| 
         @uri_parser ||= uri_escaper 
   | 
||
| ... | ... | |
| 
         if uri and uri.user.nil? and uri.password.nil? then 
   | 
||
| 
           # Probably we have http_proxy_* variables? 
   | 
||
| 
           uri.user = escape(ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER']) 
   | 
||
| 
           uri.password = escape(ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS']) 
   | 
||
| 
           uri.user = escape_auth_info(ENV['http_proxy_user'] || ENV['HTTP_PROXY_USER']) 
   | 
||
| 
           uri.password = escape_auth_info(ENV['http_proxy_pass'] || ENV['HTTP_PROXY_PASS']) 
   | 
||
| 
         end 
   | 
||
| 
         uri 
   | 
||
| ... | ... | |
| 
           net_http_args += [ 
   | 
||
| 
             @proxy_uri.host, 
   | 
||
| 
             @proxy_uri.port, 
   | 
||
| 
             @proxy_uri.user, 
   | 
||
| 
             @proxy_uri.password 
   | 
||
| 
             unescape_auth_info(@proxy_uri.user), 
   | 
||
| 
             unescape_auth_info(@proxy_uri.password) 
   | 
||
| 
           ] 
   | 
||
| 
         end 
   | 
||
| test/rubygems/test_gem_remote_fetcher.rb | ||
|---|---|---|
| 
           uri.user, uri.password = 'domain%5Cuser', 'bar' 
   | 
||
| 
           fetcher = Gem::RemoteFetcher.new uri.to_s 
   | 
||
| 
           proxy = fetcher.instance_variable_get("@proxy_uri") 
   | 
||
| 
           assert_equal 'domain\user', fetcher.unescape(proxy.user) 
   | 
||
| 
           assert_equal 'domain\user', fetcher.unescape_auth_info(proxy.user) 
   | 
||
| 
           assert_equal 'bar', proxy.password 
   | 
||
| 
           assert_data_from_proxy fetcher.fetch_path(@server_uri) 
   | 
||
| 
         end 
   | 
||
| ... | ... | |
| 
           fetcher = Gem::RemoteFetcher.new uri.to_s 
   | 
||
| 
           proxy = fetcher.instance_variable_get("@proxy_uri") 
   | 
||
| 
           assert_equal 'user', proxy.user 
   | 
||
| 
           assert_equal 'my pass', fetcher.unescape(proxy.password) 
   | 
||
| 
           assert_equal 'my pass', fetcher.unescape_auth_info(proxy.password) 
   | 
||
| 
           assert_data_from_proxy fetcher.fetch_path(@server_uri) 
   | 
||
| 
         end 
   | 
||
| 
       end 
   | 
||
| ... | ... | |
| 
           ENV['http_proxy_pass'] = 'my bar' 
   | 
||
| 
           fetcher = Gem::RemoteFetcher.new nil 
   | 
||
| 
           proxy = fetcher.instance_variable_get("@proxy_uri") 
   | 
||
| 
           assert_equal 'foo\user', fetcher.unescape(proxy.user) 
   | 
||
| 
           assert_equal 'my bar', fetcher.unescape(proxy.password) 
   | 
||
| 
           assert_equal 'foo\user', fetcher.unescape_auth_info(proxy.user) 
   | 
||
| 
           assert_equal 'my bar', fetcher.unescape_auth_info(proxy.password) 
   | 
||
| 
           assert_data_from_proxy fetcher.fetch_path(@server_uri) 
   | 
||
| 
         end 
   | 
||
| 
         use_ui @ui do 
   | 
||
| 
           ENV['http_proxy'] = @proxy_uri 
   | 
||
| 
           ENV['http_proxy_user'] = 'foo@user' 
   | 
||
| 
           ENV['http_proxy_pass'] = 'my@bar' 
   | 
||
| 
           fetcher = Gem::RemoteFetcher.new nil 
   | 
||
| 
           proxy = fetcher.instance_variable_get("@proxy_uri") 
   | 
||
| 
           assert_equal 'foo@user', fetcher.unescape_auth_info(proxy.user) 
   | 
||
| 
           assert_equal 'my@bar', fetcher.unescape_auth_info(proxy.password) 
   | 
||
| 
           assert_data_from_proxy fetcher.fetch_path(@server_uri) 
   | 
||
| 
         end 
   | 
||
| 
       end 
   | 
||