From 64cdeba2ca2620002699073acf0092ff17663622 Mon Sep 17 00:00:00 2001 From: akadusei Date: Wed, 29 Apr 2026 11:02:13 +0000 Subject: [PATCH] Forward original exceptions when re-raised --- src/lucky/cookies/cookie_jar.cr | 4 ++-- src/lucky/cookies/flash_store.cr | 2 +- src/lucky/errors.cr | 14 ++++++++------ src/lucky/json_body_parser.cr | 4 ++-- src/lucky/mime_type.cr | 4 ++-- src/lucky/support/message_encryptor.cr | 3 +-- src/lucky/support/message_verifier.cr | 2 +- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/lucky/cookies/cookie_jar.cr b/src/lucky/cookies/cookie_jar.cr index fb6c709fb..3db41a13c 100644 --- a/src/lucky/cookies/cookie_jar.cr +++ b/src/lucky/cookies/cookie_jar.cr @@ -133,8 +133,8 @@ class Lucky::CookieJar raise Lucky::CookieOverflowError.new("size of '#{key}' cookie is too big") end cookies[key.to_s] = set_cookies[key.to_s] = raw_cookie - rescue IO::Error - raise InvalidCookieValueError.new(key) + rescue e : IO::Error + raise InvalidCookieValueError.new(key, cause: e) end private def encrypt(raw_value : String) : String diff --git a/src/lucky/cookies/flash_store.cr b/src/lucky/cookies/flash_store.cr index d519d837a..7fcd49187 100644 --- a/src/lucky/cookies/flash_store.cr +++ b/src/lucky/cookies/flash_store.cr @@ -19,7 +19,7 @@ class Lucky::FlashStore end self rescue e : JSON::ParseException - raise Lucky::InvalidFlashJSONError.new(session.get?(SESSION_KEY)) + raise Lucky::InvalidFlashJSONError.new(session.get?(SESSION_KEY), cause: e) end def keep : Nil diff --git a/src/lucky/errors.cr b/src/lucky/errors.cr index ec3cd4ee3..67f6dbed9 100644 --- a/src/lucky/errors.cr +++ b/src/lucky/errors.cr @@ -19,8 +19,8 @@ module Lucky getter request - def initialize(@request : HTTP::Request) - super "Failed to parse the request parameters." + def initialize(@request : HTTP::Request, cause = nil) + super "Failed to parse the request parameters.", cause end def renderable_status : Int32 @@ -126,10 +126,11 @@ module Lucky class InvalidCookieValueError < Error getter :key - def initialize(@key : String | Symbol) + def initialize(@key : String | Symbol, cause = nil) + super(_message, cause) end - def message : String + private def _message <<-ERROR Cookie value for '#{key}' is invalid. @@ -225,10 +226,11 @@ module Lucky class InvalidFlashJSONError < Error getter bad_json - def initialize(@bad_json : String?) + def initialize(@bad_json : String?, cause = nil) + super(_message, cause) end - def message : String? + private def _message <<-MESSAGE The flash messages (stored as JSON) failed to parse in a JSON parser. Here's what it tries to parse: diff --git a/src/lucky/json_body_parser.cr b/src/lucky/json_body_parser.cr index 7ce5d008f..6587475ea 100644 --- a/src/lucky/json_body_parser.cr +++ b/src/lucky/json_body_parser.cr @@ -12,7 +12,7 @@ class Lucky::JsonBodyParser else JSON.parse(body) end - rescue JSON::ParseException - raise Lucky::ParamParsingError.new(@request) + rescue e : JSON::ParseException + raise Lucky::ParamParsingError.new(@request, cause: e) end end diff --git a/src/lucky/mime_type.cr b/src/lucky/mime_type.cr index 4356a5328..342bde33f 100644 --- a/src/lucky/mime_type.cr +++ b/src/lucky/mime_type.cr @@ -218,8 +218,8 @@ class Lucky::MimeType # multiplied by 1000 and then handled as an integer. begin ($1.to_f32 * 1000).round.to_u16 - rescue ArgumentError | OverflowError - raise InvalidMediaRange.new("#{parameter} is not a valid qvalue") + rescue e : ArgumentError | OverflowError + raise InvalidMediaRange.new("#{parameter} is not a valid qvalue", cause: e) end else 1000u16 diff --git a/src/lucky/support/message_encryptor.cr b/src/lucky/support/message_encryptor.cr index 74a03c7a4..b0227a1a2 100644 --- a/src/lucky/support/message_encryptor.cr +++ b/src/lucky/support/message_encryptor.cr @@ -61,7 +61,7 @@ module Lucky private def set_cipher_key(cipher) : Nil cipher.key = @secret rescue error : ArgumentError - raise InvalidSecretKeyBase.new(<<-MESSAGE + raise InvalidSecretKeyBase.new <<-MESSAGE, cause: error The secret key is invalid: #{error.message} @@ -78,7 +78,6 @@ module Lucky MESSAGE - ) end class InvalidSecretKeyBase < Exception diff --git a/src/lucky/support/message_verifier.cr b/src/lucky/support/message_verifier.cr index 89132ae23..387084b79 100644 --- a/src/lucky/support/message_verifier.cr +++ b/src/lucky/support/message_verifier.cr @@ -39,7 +39,7 @@ module Lucky raise(InvalidSignatureError.new) end rescue e : Base64::Error | JSON::ParseException - raise(InvalidSignatureError.new) + raise InvalidSignatureError.new(cause: e) end def generate(value : String | Bytes) : String