Project

General

Profile

Actions

Bug #8078

closed

Once nil is frozen, an unfrozen instance cannot be reached

Added by mhuggins (Matt Huggins) about 11 years ago. Updated about 11 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 1.9.3p327 (2012-11-10) [i386-mingw32]
Backport:
[ruby-core:53343]

Description

=begin
This is a rather peculiar bug I stumbled across. The basic issue is that once nil has been frozen, there is no way to access an unfrozen instance of nil.

nil.frozen? => false
nil.freeze
nil.frozen? => true

I say this is a peculiar bug because generally it doesn't matter if nil is frozen or not (since it is basically frozen even if not explicitly defined as such). However, since Ruby is based upon duck typing, you might run into a scenario like the following:

def get(cache_key)
content = Rails.cache.read(cache_key)
content.frozen? ? content.dup : content
end

If I call the above method and the cache key exists, content is a frozen string, which I then dup to get an unfrozen copy. If I call the above method and the cache key does NOT exist, content is a frozen nil, which it then attempts to dup unsuccessfully since a NilClass instance cannot be duped.
=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0