From c9dd01a66866dbd7ff867608edcd5c82a0b5e1db Mon Sep 17 00:00:00 2001 From: Matthew Somerville Date: Tue, 14 Nov 2017 20:42:48 +0000 Subject: Make sure returned geocoder data is UTF-8 decoded. It turns out that HTTP::Message (as used by LWP::Simple::get) only decodes text/* and 'XML', not application/json, as used by all the geocoders. Work around this, hopefully in a future-proof way. --- perllib/FixMyStreet/Geocode.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'perllib/FixMyStreet/Geocode.pm') diff --git a/perllib/FixMyStreet/Geocode.pm b/perllib/FixMyStreet/Geocode.pm index dd1adfe71..aeac0ab6d 100644 --- a/perllib/FixMyStreet/Geocode.pm +++ b/perllib/FixMyStreet/Geocode.pm @@ -79,8 +79,12 @@ sub cache { $url .= '&' . $args if $args; $ua->timeout(15); $js = LWP::Simple::get($url); - $cache_dir->mkpath; + # The returned data is not correctly decoded if the content type is + # e.g. application/json. Which all of our geocoders return. + # uncoverable branch false + $js = decode_utf8($js) if !utf8::is_utf8($js); if ($js && (!$re || $js !~ $re) && !FixMyStreet->config('STAGING_SITE')) { + $cache_dir->mkpath; # uncoverable statement # uncoverable statement $cache_file->spew_utf8($js); } -- cgit v1.2.3