File poison-3.1.0-git.patch of Package poison

diff --git a/config/config.exs b/config/config.exs
index 1240a78..513139a 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -15,7 +15,8 @@ use Mix.Config
 #       format: "$time $metadata[$level] $message\n"
 
 config :poison,
-  native: :erlang.system_info(:hipe_architecture) != :undefined
+  native: :erlang.system_info(:hipe_architecture) != :undefined,
+  enable_hashdict: Version.match?(System.version, "<1.4.0-rc.0")
 
 # It is also possible to import configuration files, relative to this
 # directory. For example, you can emulate configuration per environment
diff --git a/lib/poison/encoder.ex b/lib/poison/encoder.ex
index 2eefc45..6abb94e 100644
--- a/lib/poison/encoder.ex
+++ b/lib/poison/encoder.ex
@@ -15,6 +15,7 @@ defmodule Poison.Encode do
     quote do
       @compile {:inline, encode_name: 1}
 
+      # Fast path encoding string keys
       defp encode_name(value) when is_binary(value) do
         value
       end
@@ -118,8 +119,8 @@ defimpl Poison.Encoder, for: BitString do
      | escape(rest, :unicode)]
   end
 
-  defp escape(<<char :: utf8>> <> rest, :javascript) when char in [0x2028, 0x2029] do
-    [seq(char) | escape(rest, :javascript)]
+  defp escape(<<char :: utf8>> <> rest, mode) when mode in [:html_safe, :javascript] and char in [0x2028, 0x2029] do
+    [seq(char) | escape(rest, mode)]
   end
 
   defp escape(<<?/ :: utf8>> <> rest, :html_safe) do
@@ -148,7 +149,7 @@ defimpl Poison.Encoder, for: BitString do
     acc
   end
 
-  defp chunk_size(<<char :: utf8>> <> _, :javascript, acc) when char in [0x2028, 0x2029] do
+  defp chunk_size(<<char :: utf8>> <> _, mode, acc) when mode in [:html_safe, :javascript] and char in [0x2028, 0x2029] do
     acc
   end
 
@@ -230,15 +231,14 @@ defimpl Poison.Encoder, for: Map do
 
   defp strict_keys(map, false), do: map
   defp strict_keys(map, true) do
-    Enum.reduce(map, %{}, fn {key, value}, acc ->
+    Enum.each(map, fn {key, value} ->
       name = encode_name(key)
-      case Map.has_key?(acc, name) do
-        false -> Map.put(acc, name, value)
-        true ->
-          raise Poison.EncodeError, value: name,
-            message: "duplicate key found: #{inspect key}"
+      if Map.has_key?(map, name) do
+        raise Poison.EncodeError, value: name,
+          message: "duplicate key found: #{inspect key}"
       end
     end)
+    map
   end
 end
 
@@ -300,7 +300,7 @@ defimpl Poison.Encoder, for: [Range, Stream, MapSet, HashSet] do
   end
 end
 
-if Version.match?(System.version, "<1.4.0-rc.0") do
+if Application.get_env(:poison, :enable_hashdict) do
   defimpl Poison.Encoder, for: HashDict do
     alias Poison.Encoder
 
diff --git a/test/poison/encoder_test.exs b/test/poison/encoder_test.exs
index c28d1c6..2ceb711 100644
--- a/test/poison/encoder_test.exs
+++ b/test/poison/encoder_test.exs
@@ -31,6 +31,7 @@ defmodule Poison.EncoderTest do
     assert to_json("๐„ž", escape: :unicode) == ~s("\\uD834\\uDD1E")
     assert to_json("\u2028\u2029", escape: :javascript) == ~s("\\u2028\\u2029")
     assert to_json("</script>", escape: :html_safe) == ~s("<\\/script>")
+    assert to_json(~s(<script>var s = "\u2028\u2029";</script>), escape: :html_safe) == ~s("<script>var s = \\\"\\u2028\\u2029\\\";<\\/script>")
     assert to_json("รกรฉรญรณรบร รจรฌรฒรนรขรชรฎรดรปรฃแบฝฤฉรตลฉ") == ~s("รกรฉรญรณรบร รจรฌรฒรนรขรชรฎรดรปรฃแบฝฤฉรตลฉ")
   end
 
@@ -118,7 +119,7 @@ defmodule Poison.EncoderTest do
     end
   end
 
-  if Version.match?(System.version, "<1.4.0-rc.0") do
+  if Application.get_env(:poison, :enable_hashdict) do
     test "HashDict" do
       dict = HashDict.new
       assert to_json(dict) == "{}"
openSUSE Build Service is sponsored by