From: "andrykonchin (Andrew Konchin) via ruby-core" <ruby-core@...>
Date: 2023-02-13T21:53:12+00:00
Subject: [ruby-core:112416] [Ruby master Bug#19427] Marshal.load(source, freeze: true) doesn't freeze in some cases

Issue #19427 has been updated by andrykonchin (Andrew Konchin).


The issue was closed. Does it mean that current behaviour of `TYPE_USERDEF` and `TYPE_USRMARSHAL` is expected?

Or should I create separate issues to track them independently?

----------------------------------------
Bug #19427: Marshal.load(source, freeze: true) doesn't freeze in some cases
https://bugs.ruby-lang.org/issues/19427#change-101862

* Author: andrykonchin (Andrew Konchin)
* Status: Closed
* Priority: Normal
* ruby -v: 3.1
* Backport: 2.7: DONTNEED, 3.0: DONTNEED, 3.1: REQUIRED, 3.2: REQUIRED
----------------------------------------
I've noticed that the `freeze` option doesn't work in the following cases:
- when dumped object extends a module
- when dumped object responds to `#marshal_dump` and `#marshal_load` methods
- when dumped object responds to `#_dump` method

Is it expected behaviour or maybe a known issue?

Examples:

```ruby
module M
end

object = Object.new
object.extend(M)

object = Marshal.load(Marshal.dump(object), freeze: true)
object.frozen? # => false
```

```ruby
class UserMarshal
  attr_accessor :data

  def initialize
    @data = 'stuff'
  end
  def marshal_dump() :data end
  def marshal_load(data) @data = data end
end

object = Marshal.load(Marshal.dump(UserMarshal.new), freeze: true)
object.frozen? # => false
```

```ruby
class UserDefined
  attr_reader :a, :b

  def initialize
    @a = 'stuff'
    @b = @a
  end

  def _dump(depth)
    Marshal.dump [:stuff, :stuff]
  end

  def self._load(data)
    a, b = Marshal.load data

    obj = allocate
    obj.instance_variable_set :@a, a
    obj.instance_variable_set :@b, b

    obj
  end
end

object = Marshal.load(Marshal.dump(UserDefined.new), freeze: true)
object.frozen? # => false
```



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/