fallback can't have pack.json, reflect that in code
authorEkaterina Vaartis <vaartis@cock.li>
Thu, 15 Aug 2019 08:46:03 +0000 (11:46 +0300)
committerEkaterina Vaartis <vaartis@cock.li>
Wed, 18 Sep 2019 21:16:33 +0000 (00:16 +0300)
having pacj.json and sha256 in a fallback pack would cause a circular dependency of itself

lib/pleroma/web/emoji_api/emoji_api_controller.ex

index aedc70372137c839ef5b5ae94027d489050b7902..3b9eab8b8e9361f61e7b964133bca70c54114a1e 100644 (file)
@@ -184,19 +184,19 @@ keeping it in cache for #{div(cache_ms, 1000)}s")
           pack_dir = Path.join(@emoji_dir_path, local_name)
           File.mkdir_p!(pack_dir)
 
+          # Fallback cannot contain a pack.json file
           files =
-            ['pack.json'] ++
+            unless(pinfo[:fallback], do: ['pack.json'], else: []) ++
               (pfiles |> Enum.map(fn {_, path} -> to_charlist(path) end))
 
           {:ok, _} = :zip.unzip(emoji_archive, cwd: to_charlist(pack_dir), file_list: files)
 
-          # Fallback URL might not contain a pack.json file. Put on we have if there's none
+          # Fallback can't contain a pack.json file, since that would cause the fallback-src-sha256
+          # in it to depend on itself
           if pinfo[:fallback] do
             pack_file_path = Path.join(pack_dir, "pack.json")
 
-            unless File.exists?(pack_file_path) do
-              File.write!(pack_file_path, Jason.encode!(full_pack))
-            end
+            File.write!(pack_file_path, Jason.encode!(full_pack))
           end
 
           conn |> text("ok")