X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/6f383d6073b68409e8da243356eccf5e2847f264..ca53f9c1bf1576e4750483ee9538b1de49e141ed:/lib/lib.php diff --git a/lib/lib.php b/lib/lib.php index 0f87c37e..3a6166a6 100644 --- a/lib/lib.php +++ b/lib/lib.php @@ -61,23 +61,26 @@ function byImportance($a, $b) function javascript_renderData($xVal, $iOptions = 0) { - $iOptions |= JSON_UNESCAPED_UNICODE; + $sCallback = isset($_GET['json_callback']) ? $_GET['json_callback'] : ''; + if ($sCallback && !preg_match('/^[$_\p{L}][$_\p{L}\p{Nd}.[\]]*$/u', $sCallback)) { + // Unset, we call javascript_renderData again during exception handling + unset($_GET['json_callback']); + throw new Exception('Invalid json_callback value', 400); + } + + $iOptions |= JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES; if (isset($_GET['pretty']) && in_array(strtolower($_GET['pretty']), array('1', 'true'))) { $iOptions |= JSON_PRETTY_PRINT; } $jsonout = json_encode($xVal, $iOptions); - if (!isset($_GET['json_callback'])) { + if ($sCallback) { + header('Content-Type: application/javascript; charset=UTF-8'); + echo $_GET['json_callback'].'('.$jsonout.')'; + } else { header('Content-Type: application/json; charset=UTF-8'); echo $jsonout; - } else { - if (preg_match('/^[$_\p{L}][$_\p{L}\p{Nd}.[\]]*$/u', $_GET['json_callback'])) { - header('Content-Type: application/javascript; charset=UTF-8'); - echo $_GET['json_callback'].'('.$jsonout.')'; - } else { - header('HTTP/1.0 400 Bad Request'); - } } }