[#86787] [Ruby trunk Feature#14723] [WIP] sleepy GC — ko1@...

Issue #14723 has been updated by ko1 (Koichi Sasada).

13 messages 2018/05/01
[#86790] Re: [Ruby trunk Feature#14723] [WIP] sleepy GC — Eric Wong <normalperson@...> 2018/05/01

ko1@atdot.net wrote:

[#87095] [Ruby trunk Feature#14767] [PATCH] gc.c: use monotonic counters for objspace_malloc_increase — ko1@...

Issue #14767 has been updated by ko1 (Koichi Sasada).

9 messages 2018/05/17

[ruby-core:86852] [Ruby trunk Bug#14732] CGI.unescape returns different instance between Ruby 2.3 and 2.4

From: me@...
Date: 2018-05-03 00:22:02 UTC
List: ruby-core #86852
Issue #14732 has been updated by jnchito (Junichi Ito).


normalperson (Eric Wong) wrote:
> > > https://bugs.ruby-lang.org/issues/14732
>  
>  r63328  This also affects 2.3 for unescapeHTML.

I confirmed r63328, but could not understand the valid specification.

In Ruby 2.3, CGI.escape and CGI.unescape always return String instance regardless of class and value:

~~~ text
$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.escape(S.new("a")).class'

ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
String

$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.escape(S.new(">")).class'

ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
String

$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.unescape(S.new("a")).class'

ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
String

$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.unescape(S.new("%3E")).class'

ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
String
~~~

In Ruby 2.4, results differ according to argument values:

~~~ text
$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.escape(S.new("a")).class'

ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]
S

$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.escape(S.new(">")).class'

ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]
String

$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.unescape(S.new("a")).class'

ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]
S

$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.unescape(S.new("%3E")).class'

ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]
String
~~~

With r63328, I feel the all results would be the instance of "S" and this behavior is different from Ruby 2.3. But is this valid in Ruby 2.4?

----------------------------------------
Bug #14732: CGI.unescape returns different instance between Ruby 2.3 and 2.4
https://bugs.ruby-lang.org/issues/14732#change-71818

* Author: jnchito (Junichi Ito)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: 2.4.4
* Backport: 2.3: REQUIRED, 2.4: REQUIRED, 2.5: REQUIRED
----------------------------------------
In Ruby 2.3, CGI.unescape always returns String object:

~~~ ruby
$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.unescape(S.new("a")).class'

ruby 2.3.6p384 (2017-12-14 revision 61254) [x86_64-darwin17]
String
~~~

But in Ruby 2.4, it might return non-String object when the argument value is not a String instance:

~~~ ruby
$ ruby -v -rcgi/util -e 'class S < String; end; puts CGI.unescape(S.new("a")).class'

ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]
S
~~~

This change triggered the following issue:

https://github.com/rest-client/rest-client/issues/662

Is this change intentional?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next