stop atom parsing at feed tag close

This commit is contained in:
mmacia committed 2026-07-10 22:51:02 +00:00
1 parent cd698294c1
commit ecc2286733
2 files changed
+6 -2

No files matched your search

+1
View File
@@ -17,6 +17,7 @@ defmodule FeedReader.Formats.Atom do
limits: XMLResourceLimits.new(opts), limits: XMLResourceLimits.new(opts),
frames: [], frames: [],
feed: nil, feed: nil,
root_closed: false,
error: nil error: nil
} }
+5 -2
View File
@@ -91,10 +91,10 @@ defmodule FeedReader.Formats.Atom.Handler do
defp close_element(%{name: "feed"}, feed, %{feed: nil} = state) do defp close_element(%{name: "feed"}, feed, %{feed: nil} = state) do
state = %{state | feed: feed} state = %{state | feed: feed}
state.event_sink.({:feed, Atom.normalize_feed(state, state.opts)}) state.event_sink.({:feed, Atom.normalize_feed(state, state.opts)})
{:ok, state} halt_at_root(state)
end end
defp close_element(%{name: "feed"}, _feed, state), do: {:ok, state} defp close_element(%{name: "feed"}, _feed, state), do: halt_at_root(state)
defp close_element(frame, value, %{frames: [parent | rest]} = state) do defp close_element(frame, value, %{frames: [parent | rest]} = state) do
children = Map.update(parent.children, frame.name, value, &(List.wrap(&1) ++ [value])) children = Map.update(parent.children, frame.name, value, &(List.wrap(&1) ++ [value]))
@@ -104,6 +104,9 @@ defmodule FeedReader.Formats.Atom.Handler do
defp close_element(_frame, _value, state), do: {:ok, state} defp close_element(_frame, _value, state), do: {:ok, state}
defp halt_at_root(%{frames: []} = state), do: {:halt, %{state | root_closed: true}}
defp halt_at_root(state), do: {:ok, state}
defp render(frame) do defp render(frame) do
attrs = Enum.map_join(frame.attrs, " ", fn {key, value} -> ~s(#{key}="#{value}") end) attrs = Enum.map_join(frame.attrs, " ", fn {key, value} -> ~s(#{key}="#{value}") end)
opening = if attrs == "", do: "<#{frame.name}>", else: "<#{frame.name} #{attrs}>" opening = if attrs == "", do: "<#{frame.name}>", else: "<#{frame.name} #{attrs}>"