diff options
author | Victor Rodrigues <rodrigues@users.noreply.github.com> | 2019-05-10 20:47:36 +0200 |
---|---|---|
committer | Fernando Tapia Rico <fertapric@gmail.com> | 2019-05-10 20:47:36 +0200 |
commit | 7e6bac3450ddfa20da2cc310235a292b27c3b446 (patch) | |
tree | 26ec64044bfca906e402b455f519db55ca14fd54 | |
parent | f41d758541c3fb9199d4ed5d91fd327ff4dced79 (diff) | |
download | elixir-7e6bac3450ddfa20da2cc310235a292b27c3b446.tar.gz |
Do not allow defmodule with special atoms (#9032)
Fixes #9030
-rw-r--r-- | lib/elixir/src/elixir_module.erl | 2 | ||||
-rw-r--r-- | lib/elixir/test/elixir/kernel_test.exs | 14 |
2 files changed, 16 insertions, 0 deletions
diff --git a/lib/elixir/src/elixir_module.erl b/lib/elixir/src/elixir_module.erl index e05e2a675..016c7c67c 100644 --- a/lib/elixir/src/elixir_module.erl +++ b/lib/elixir/src/elixir_module.erl @@ -54,6 +54,8 @@ next_counter(Module) -> %% Compilation hook +compile(Module, _Block, _Vars, #{line := Line, file := File}) when Module == nil; is_boolean(Module) -> + elixir_errors:form_error([{line, Line}], File, ?MODULE, {invalid_module, Module}); compile(Module, Block, Vars, #{line := Line} = Env) when is_atom(Module) -> %% In case we are generating a module from inside a function, %% we get rid of the lexical tracker information as, at this diff --git a/lib/elixir/test/elixir/kernel_test.exs b/lib/elixir/test/elixir/kernel_test.exs index d07324be1..3c189423d 100644 --- a/lib/elixir/test/elixir/kernel_test.exs +++ b/lib/elixir/test/elixir/kernel_test.exs @@ -627,6 +627,20 @@ defmodule KernelTest do end end + describe "defmodule" do + test "does not accept special atoms as module names" do + special_atoms = [nil, true, false] + + Enum.each(special_atoms, fn special_atom -> + msg = ~r"invalid module name: #{inspect(special_atom)}" + + assert_raise CompileError, msg, fn -> + defmodule special_atom, do: :ok + end + end) + end + end + describe "access" do defmodule StructAccess do defstruct [:foo, :bar] |