Fix decoding data encoded using a non-String purpose

Data encoded using a non-String purpose and `use_message_serializer_for_metadata == false` was incorrectly decoded,
triggering a "mismatched purpose" error during decode.
Fix this by ensuring that we compare both sides as a String.
This commit is contained in:
Jacopo 2023-10-17 09:40:22 +02:00
parent c139e52ced
commit cebdf71a00
2 changed files with 8 additions and 1 deletions

View File

@ -82,7 +82,7 @@ module ActiveSupport
throw :invalid_message_content, "expired"
end
if hash["pur"] != purpose&.to_s
if hash["pur"].to_s != purpose.to_s
throw :invalid_message_content, "mismatched purpose"
end

View File

@ -92,6 +92,13 @@ module MessageMetadataTests
assert_roundtrip "a string", codec, { purpose: "x", expires_in: 1.year }, { purpose: "x" }
end
test "messages with non-string purpose are readable" do
each_scenario do |data, codec|
message = encode(data, codec, purpose: [ "x", 1 ])
assert_equal data, decode(message, codec, purpose: [ "x", 1 ])
end
end
test "messages are readable regardless of use_message_serializer_for_metadata" do
each_scenario do |data, codec|
message = encode(data, codec, purpose: "x")