forked from friendica/php-json-ld
Validate URLs; check for file/json read errors.
This commit is contained in:
parent
d85c25bdb3
commit
4ddb4e8c2c
11
jsonld.php
11
jsonld.php
|
@ -5063,6 +5063,9 @@ class JsonLdProcessor {
|
||||||
// for tracking the URLs to retrieve
|
// for tracking the URLs to retrieve
|
||||||
$urls = new stdClass();
|
$urls = new stdClass();
|
||||||
|
|
||||||
|
// regex for validating URLs
|
||||||
|
$regex = '/(http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/';
|
||||||
|
|
||||||
// find all URLs in the given input
|
// find all URLs in the given input
|
||||||
$this->_findContextUrls($input, $urls, false, $base);
|
$this->_findContextUrls($input, $urls, false, $base);
|
||||||
|
|
||||||
|
@ -5070,6 +5073,12 @@ class JsonLdProcessor {
|
||||||
$queue = array();
|
$queue = array();
|
||||||
foreach($urls as $url => $ctx) {
|
foreach($urls as $url => $ctx) {
|
||||||
if($ctx === false) {
|
if($ctx === false) {
|
||||||
|
// validate URL
|
||||||
|
if(!preg_match($regex, $url)) {
|
||||||
|
throw new JsonLdException(
|
||||||
|
'Malformed or unsupported URL.', 'jsonld.InvalidUrl',
|
||||||
|
'loading remote context failed', array('url' => $url));
|
||||||
|
}
|
||||||
$queue[] = $url;
|
$queue[] = $url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5098,7 +5107,7 @@ class JsonLdProcessor {
|
||||||
catch(Exception $e) {
|
catch(Exception $e) {
|
||||||
throw new JsonLdException(
|
throw new JsonLdException(
|
||||||
'Could not parse JSON from URL.',
|
'Could not parse JSON from URL.',
|
||||||
'jsonld.ParseError', 'invalid remote context',
|
'jsonld.ParseError', 'loading remote context failed',
|
||||||
array('url' => $url), $e);
|
array('url' => $url), $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
14
test.php
14
test.php
|
@ -570,15 +570,23 @@ class EarlReport implements PHPUnit_Framework_TestListener {
|
||||||
|
|
||||||
class Util {
|
class Util {
|
||||||
public static function readFile($filename) {
|
public static function readFile($filename) {
|
||||||
return file_get_contents($filename);
|
$rval = @file_get_contents($filename);
|
||||||
|
if($rval === false) {
|
||||||
|
throw new Exception('File read error: ' . $filename);
|
||||||
|
}
|
||||||
|
return $rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function readJson($filename) {
|
public static function readJson($filename) {
|
||||||
return json_decode(file_get_contents($filename));
|
$rval = json_decode(self::readFile($filename));
|
||||||
|
if($rval === null) {
|
||||||
|
throw new Exception('JSON parse error');
|
||||||
|
}
|
||||||
|
return $rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function readNQuads($filename) {
|
public static function readNQuads($filename) {
|
||||||
return readFile($filename);
|
return self::readFile($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function jsonldEncode($input) {
|
public static function jsonldEncode($input) {
|
||||||
|
|
Loading…
Reference in a new issue