Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Pleroma
pleroma
Commits
dafb6f0b
Commit
dafb6f0b
authored
Jan 31, 2019
by
kaniini
Browse files
rich media: parser: reject OGP fields we cannot safely process
parent
bd89cdbe
Pipeline
#6844
failed with stages
in 5 minutes and 36 seconds
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
lib/pleroma/web/rich_media/parser.ex
View file @
dafb6f0b
...
...
@@ -30,7 +30,7 @@ defp parse_url(url) do
try
do
{
:ok
,
%
Tesla
.
Env
{
body:
html
}}
=
Pleroma
.
HTTP
.
get
(
url
,
[],
adapter:
[
pool:
:media
])
html
|>
maybe_parse
()
|>
get
_parsed_data
()
html
|>
maybe_parse
()
|>
clean_parsed_data
()
|>
check
_parsed_data
()
rescue
e
->
{
:error
,
"Parsing error:
#{
inspect
(
e
)
}
"
}
...
...
@@ -46,11 +46,31 @@ defp maybe_parse(html) do
end
)
end
defp
get
_parsed_data
(%{
title:
title
}
=
data
)
when
is_binary
(
title
)
and
byte_size
(
title
)
>
0
do
defp
check
_parsed_data
(%{
title:
title
}
=
data
)
when
is_binary
(
title
)
and
byte_size
(
title
)
>
0
do
{
:ok
,
data
}
end
defp
get
_parsed_data
(
data
)
do
defp
check
_parsed_data
(
data
)
do
{
:error
,
"Found metadata was invalid or incomplete:
#{
inspect
(
data
)
}
"
}
end
defp
string_is_valid_unicode
(
data
)
do
data
|>
:unicode
.
characters_to_binary
()
|>
clean_string
()
end
defp
clean_string
({
:error
,
_
,
_
}),
do
:
{
:error
,
"Invalid data"
}
defp
clean_string
(
data
),
do
:
{
:ok
,
data
}
defp
clean_parsed_data
(
data
)
do
data
|>
Enum
.
reject
(
fn
{
_
,
val
}
->
case
string_is_valid_unicode
(
val
)
do
{
:ok
,
_
}
->
false
_
->
true
end
end
)
|>
Map
.
new
()
end
end
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment