Skip to content
Snippets Groups Projects
Commit 39bacba2 authored by lain's avatar lain
Browse files

More resilient xml parsing.

parent 6935fc3e
Branches
No related tags found
No related merge requests found
......@@ -30,6 +30,7 @@ def handle_incoming(xml_string) do
activities = Enum.map(entries, fn (entry) ->
{:xmlObj, :string, object_type} = :xmerl_xpath.string('string(/entry/activity:object-type[1])', entry)
{:xmlObj, :string, verb} = :xmerl_xpath.string('string(/entry/activity:verb[1])', entry)
Logger.debug("Handling #{verb}")
case verb do
'http://activitystrea.ms/schema/1.0/follow' ->
......
......@@ -98,7 +98,7 @@ def finger(account, getter \\ &@httpoison.get/3) do
end
with {:ok, %{status_code: status_code, body: body}} when status_code in 200..299 <- response,
doc <- XML.parse_document(body),
doc when doc != :error<- XML.parse_document(body),
{:ok, data} <- webfinger_from_xml(doc) do
{:ok, data}
else
......
defmodule Pleroma.Web.XML do
require Logger
def string_from_xpath(xpath, :error), do: nil
def string_from_xpath(xpath, doc) do
{:xmlObj, :string, res} = :xmerl_xpath.string('string(#{xpath})', doc)
......@@ -10,10 +13,16 @@ def string_from_xpath(xpath, doc) do
end
def parse_document(text) do
{doc, _rest} = text
|> :binary.bin_to_list
|> :xmerl_scan.string
try do
{doc, _rest} = text
|> :binary.bin_to_list
|> :xmerl_scan.string
doc
doc
catch
:exit, error ->
Logger.debug("Couldn't parse xml: #{inspect(text)}")
:error
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment