Do not use Access protocol on values that may be structs when normalizing erlang errors #14532
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.
I noticed this this error in ElixirLS. I don't know what code triggered it but the
ErlangError.normalize
implementation doesn't seem correct in assuming that Access protocol can be used on unknown value coming from stack trace.While working on that change I started wondering what is the contract on
Exception.blame
.Exception.message
callback does use try rescue pattern so the call should be safe.blame
invokes client module code with no guarantees so a faulty implementation might throw/raise. https://github.com/elixir-lang/elixir/blob/main/lib/elixir/lib/exception.ex#L214Shouldn't
blame
catch the error and fall back to the provided argument values if the callback crashes? Without that guaranteesblame
is at least cumbersome to use as the correct way would be