summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Rodrigues <rodrigues@users.noreply.github.com>2019-05-10 20:47:36 +0200
committerFernando Tapia Rico <fertapric@gmail.com>2019-05-10 20:47:36 +0200
commit7e6bac3450ddfa20da2cc310235a292b27c3b446 (patch)
tree26ec64044bfca906e402b455f519db55ca14fd54
parentf41d758541c3fb9199d4ed5d91fd327ff4dced79 (diff)
downloadelixir-7e6bac3450ddfa20da2cc310235a292b27c3b446.tar.gz
Do not allow defmodule with special atoms (#9032)
Fixes #9030
-rw-r--r--lib/elixir/src/elixir_module.erl2
-rw-r--r--lib/elixir/test/elixir/kernel_test.exs14
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]