aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/Geocode.pm
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2017-11-14 20:42:48 +0000
committerMatthew Somerville <matthew-github@dracos.co.uk>2017-11-15 11:50:27 +0000
commitc9dd01a66866dbd7ff867608edcd5c82a0b5e1db (patch)
treeb7930ae97d714616d1c7fb2b21f8bcc2e9d74cdc /perllib/FixMyStreet/Geocode.pm
parenta5bde7c6cd2bca5a8f1dfebdfb0a3040ead1566b (diff)
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.
Diffstat (limited to 'perllib/FixMyStreet/Geocode.pm')
-rw-r--r--perllib/FixMyStreet/Geocode.pm6
1 files changed, 5 insertions, 1 deletions
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);
}