Skip to content

Commit daab3f8

Browse files
lukaszsamsonjosevalim
authored andcommitted
Fix crashes when :beam_lib.info(beam) returns error (#13075)
1 parent ec8782a commit daab3f8

File tree

4 files changed

+7
-4
lines changed

4 files changed

+7
-4
lines changed

lib/elixir/lib/code.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2057,7 +2057,8 @@ defmodule Code do
20572057

20582058
defp get_beam_and_path(module) do
20592059
with {^module, beam, filename} <- :code.get_object_code(module),
2060-
{:ok, ^module} <- beam |> :beam_lib.info() |> Keyword.fetch(:module) do
2060+
info_pairs when is_list(info_pairs) <- :beam_lib.info(beam),
2061+
{:ok, ^module} <- Keyword.fetch(info_pairs, :module) do
20612062
{beam, filename}
20622063
else
20632064
_ -> :error

lib/elixir/lib/code/typespec.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ defmodule Code.Typespec do
175175

176176
defp get_module_and_beam(module) when is_atom(module) do
177177
with {^module, beam, _filename} <- :code.get_object_code(module),
178-
{:ok, ^module} <- beam |> :beam_lib.info() |> Keyword.fetch(:module) do
178+
info_pairs when is_list(info_pairs) <- :beam_lib.info(beam),
179+
{:ok, ^module} <- Keyword.fetch(info_pairs, :module) do
179180
{module, beam}
180181
else
181182
_ -> :error

lib/iex/lib/iex/helpers.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1476,7 +1476,8 @@ defmodule IEx.Helpers do
14761476

14771477
defp get_beam_and_path(module) do
14781478
with {^module, beam, filename} <- :code.get_object_code(module),
1479-
{:ok, ^module} <- beam |> :beam_lib.info() |> Keyword.fetch(:module) do
1479+
info_pairs when is_list(info_pairs) <- :beam_lib.info(beam),
1480+
{:ok, ^module} <- Keyword.fetch(info_pairs, :module) do
14801481
{beam, filename}
14811482
else
14821483
_ -> :error

lib/iex/lib/iex/info.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ defimpl IEx.Info, for: Atom do
8989

9090
{^atom, beam, _path} ->
9191
info = :beam_lib.info(beam)
92-
Keyword.fetch(info, :module) == {:ok, atom}
92+
is_list(info) and Keyword.fetch(info, :module) == {:ok, atom}
9393
end
9494
end
9595

0 commit comments

Comments
 (0)