From 8b73371f99c61224c02616f0bcb51056451e7997 Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Fri, 28 Aug 2026 02:49:30 +0300 Subject: [PATCH 1/2] Compare the missing-default sentinel by identity --- lib/pstore.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pstore.rb b/lib/pstore.rb index e730be2..11db0fa 100644 --- a/lib/pstore.rb +++ b/lib/pstore.rb @@ -439,7 +439,7 @@ def [](key) def fetch(key, default=PStore::Error) in_transaction unless @table.key? key - if default == PStore::Error + if PStore::Error.equal?(default) raise PStore::Error, format("undefined key '%s'", key) else return default From 4da003797d7e4c581a8569c2df2431cf4dd25742 Mon Sep 17 00:00:00 2001 From: Oskar Eichler <62393985+OskarEichler@users.noreply.github.com> Date: Fri, 28 Aug 2026 14:59:58 +0300 Subject: [PATCH 2/2] test: cover PStore regression --- test/test_pstore.rb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/test_pstore.rb b/test/test_pstore.rb index 4a65e4f..6a3e747 100644 --- a/test/test_pstore.rb +++ b/test/test_pstore.rb @@ -190,4 +190,13 @@ def clear_store def second_file File.join(Dir.tmpdir, "pstore.tmp2.#{Process.pid}") end + def test_fetch_compares_missing_default_by_identity + default = Object.new + def default.==(_other) + true + end + + assert_same(default, @pstore.transaction(true) { @pstore.fetch(:missing, default) }) + end + end