From 15e6c650d5df2922c4e77184fe13c827cb111cdb Mon Sep 17 00:00:00 2001 From: Michal Muskala Date: Tue, 15 Dec 2015 22:50:57 +0100 Subject: [PATCH] Make sure we don't allow fields as values --- lib/mongo_ecto/conversions.ex | 4 +++- lib/mongo_ecto/utils.ex | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/mongo_ecto/conversions.ex b/lib/mongo_ecto/conversions.ex index b282559..a7987ea 100644 --- a/lib/mongo_ecto/conversions.ex +++ b/lib/mongo_ecto/conversions.ex @@ -44,8 +44,10 @@ defmodule Mongo.Ecto.Conversions do do: document(keyword, pk) def from_ecto_pk(list, pk) when is_list(list), do: map(list, &from_ecto_pk(&1, pk)) - def from_ecto_pk(value, _pk), + def from_ecto_pk(value, _pk) when is_literal(value), do: {:ok, value} + def from_ecto_pk(value, _pk), + do: :error defp document(doc, pk) do map(doc, fn {key, value} -> diff --git a/lib/mongo_ecto/utils.ex b/lib/mongo_ecto/utils.ex index 248801e..6096987 100644 --- a/lib/mongo_ecto/utils.ex +++ b/lib/mongo_ecto/utils.ex @@ -7,4 +7,10 @@ defmodule Mongo.Ecto.Utils do unquote(doc) |> hd |> tuple_size == 2 end end + + defmacro is_literal(value) do + quote do + is_atom(unquote(value)) or is_number(unquote(value)) or is_binary(unquote(value)) + end + end end