Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fixes #253] Avoid 'defined?' buggy behavior in ruby 2.5.0 #271

Merged
merged 1 commit into from
Mar 9, 2018

Commits on Jan 29, 2018

  1. Avoid 'defined?' buggy behavior in ruby 2.5.0. Fixes rack#253

    'defined?' is buggy in ruby 2.5.0, which under certain circumstances
    users using rack-attack can hit. See issue rack#253.
    
    I reported (https://bugs.ruby-lang.org/issues/14407) and
    fixed (ruby/ruby#1800) the issue in
    ruby already, but i guess i would take some time before there's
    a new ruby release including that fix.
    
    So for now we would need to circumvent this bug by using
    'const_defined?' instead of 'defined?' for this particular case.
    
    More details:
    
    Anyone using:
      * ruby 2.5.0
      * redis
      * rack-attack without redis-store and using at least one throttle
      * having a toplevel class named Store
    
    will hit this ruby 2.5.0 bug https://bugs.ruby-lang.org/issues/14407
    
    That's because of the following buggy behavior of 'defined?' under ruby
    2.5:
    
    ```
    $ ruby -v
    ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
    
    $ irb
    > class Redis
    > end
    => nil
    > class Store
    > end
    => nil
    > defined?(::Redis::Store)
    => "constant"
    > ::Redis::Store
      NameError (uninitialized constant Redis::Store
        Did you mean?  Store)
    ```
    grzuy committed Jan 29, 2018
    Configuration menu
    Copy the full SHA
    6af29fb View commit details
    Browse the repository at this point in the history