Incorrect deserialization of some instances serialized by version 0.2.0
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 68/100
Hướng nghiên cứu
Bắt đầu trong lib/ostruct.rb, khoảng các dòng 449-454, nơi hook giải tuần tự xử lý các tài liệu legacy. Tái hiện vấn đề bằng dữ liệu Psych.load được cung cấp và kiểm tra cách cả hai khóa ở cấp gốc được diễn giải. Hoàn tất khi đối tượng đã được tuần tự hóa khôi phục foo và bar dưới dạng các thuộc tính mà không hiển thị table hoặc modifiable dưới dạng các thuộc tính.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
In the ruby 2 version of OpenStruct, serialized objects can have two root keys: table and modifiable. The second key only seems to appear after an attribute is assigned post-initialization:
irb(main):012:0> OpenStruct::VERSION
=> "0.2.0"
irb(main):013:0> RUBY_VERSION
=> "2.7.5"
irb(main):014:0> s = OpenStruct.new(foo: 1, bar: 'baz')
=> #<OpenStruct foo=1, bar="baz">
irb(main):015:0> Psych.dump s
=> "--- !ruby/object:OpenStruct\ntable:\n :foo: 1\n :bar: baz\n"
irb(main):017:0> s.bar = 'baz'
=> "baz"
irb(main):019:0> Psych.dump s
=> "--- !ruby/object:OpenStruct\ntable:\n :foo: 1\n :bar: baz\nmodifiable: true\n"
On newer versions of OpenStruct, serialized objects with that key are not deserialized as expected:
irb(main):010:0> OpenStruct::VERSION
=> "0.3.1"
irb(main):011:0> RUBY_VERSION
=> "3.0.5"
irb(main):012:0> s = Psych.load "--- !ruby/object:OpenStruct\ntable:\n :foo: 1\n :bar: baz\nmodifiable: true\n"
=> #<OpenStruct table={:foo=>1, :bar=>"baz"}, modifiable=true>
irb(main):013:0> s.foo
=> nil
The deserialization hook provided by OpenStruct attempts to be backwards compatible, but incorrectly assumes that legacy documents have exactly one root-level key table:
https://github.com/ruby/ostruct/blob/master/lib/ostruct.rb#L449-L454
- Ngôn ngữ chính
- Ruby
- Star
- 175
- Fork
- 35
- Merge trung bình
- 16 giờ 14 phút
- Pull request đã merge (30 ngày)
- 1
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ruby/ostruct
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 45/100
-
new warning with ruby 3.4 Đang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 35/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 42/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 25/100
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
Issue tương tự
-
user-reported
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
Kong/developer.konghq.com#7316 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
TheOdinProject/curriculum#31408 ·
-
CI: json 3.0.2 removed `quirks_mode`, breaking ActiveSupport's JSON encoder on every test job Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 74/100
bensheldon/good_job#1816 · 5 bình luận ·
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
notch8/utk_knapsack#148 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 78/100
Homebrew/homebrew-cask#288729 · 1 bình luận ·