Fix error handling and serialization in workflow errors#353
Open
kochrac wants to merge 2 commits intocoinbase:masterfrom
Open
Fix error handling and serialization in workflow errors#353kochrac wants to merge 2 commits intocoinbase:masterfrom
kochrac wants to merge 2 commits intocoinbase:masterfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
fix
detailsis definitely initialized before we enter thebeginblock that contains therescue, or avoid referencing it in therescuewithout such a guarantee. The cleanest way without changing functionality is:detailsbefore thebeginso it's initialized even iffailure.application_failure_info.detailsitself raises.rescueblock, guard access todetails.payloads.first.dataso it doesn’t raise ifdetailsisnilor has an unexpected structure. Since this is only for logging, falling back to a safe placeholder string ifdetailsis unavailable preserves behavior and avoids new crashes.exception, settingmessage, logging) unchanged.Concretely:
details = failure.application_failure_info.detailsto just before thebegin.rescue, computeserialized_errorusing a defensive expression that checksdetailsanddetails.payloads.firstexist before accessing.data, otherwise using something likenilor a descriptive string. This keeps the log informative without risking another error in the rescue handler.In Ruby, it is not necessary to explicitly initialize variables. If a local variable has not been explicitly initialized, it will have the value
nil. If this happens unintentionally, though, the variable will not represent an object with the expected methods, and a method call on the variable will raise aNoMethodError.Incorrect Usage
In the following code, the call to
create_filemay fail and then the callf.closewill raise aNoMethodErrorsincefwill benilat that point.References
RubyGuides You Need To Know About Nil
Ruby-Doc NoMethodError