PHRAS-3412_bad-gps-crash-indexation_MASTER

fix : PHRAS-3412 bad gps values are ignored
This commit is contained in:
jygaulier
2021-04-01 15:45:40 +02:00
parent 6a55744823
commit 27433c769f

View File

@@ -11,8 +11,6 @@
namespace Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator; namespace Alchemy\Phrasea\SearchEngine\Elastic\Indexer\Record\Hydrator;
use Assert\Assertion;
class GpsPosition class GpsPosition
{ {
const FULL_GEO_NOTATION = 'FullNotation'; const FULL_GEO_NOTATION = 'FullNotation';
@@ -44,35 +42,35 @@ class GpsPosition
{ {
switch ($tag_name) { switch ($tag_name) {
case self::LONGITUDE_TAG_NAME: case self::LONGITUDE_TAG_NAME:
Assertion::numeric($value); if(is_numeric($value)) {
$value = (float)$value; $value = (float)$value;
if ($value >= -180.0 && $value <= 180.0) { if ($value >= -180.0 && $value <= 180.0) {
$this->longitude = $value; $this->longitude = $value;
} }
}
break; break;
case self::LATITUDE_TAG_NAME: case self::LATITUDE_TAG_NAME:
Assertion::numeric($value); if(is_numeric($value)) {
$value = (float)$value; $value = (float)$value;
if ($value >= -90.0 && $value <= 90.0) { if ($value >= -90.0 && $value <= 90.0) {
$this->latitude = $value; $this->latitude = $value;
} }
}
break; break;
case self::LONGITUDE_REF_TAG_NAME: case self::LONGITUDE_REF_TAG_NAME:
$normalized = strtoupper($value); $normalized = strtoupper($value);
if ($normalized !== self::LONGITUDE_REF_EAST && $normalized !== self::LONGITUDE_REF_WEST) { if ($normalized === self::LONGITUDE_REF_EAST || $normalized === self::LONGITUDE_REF_WEST) {
throw new \InvalidArgumentException(sprintf('Invalid longitude reference "%s" (expecting "%s" or "%s").', $value, self::LONGITUDE_REF_EAST, self::LONGITUDE_REF_WEST));
}
$this->longitude_ref = $value; $this->longitude_ref = $value;
}
break; break;
case self::LATITUDE_REF_TAG_NAME: case self::LATITUDE_REF_TAG_NAME:
$normalized = strtoupper($value); $normalized = strtoupper($value);
if ($normalized !== self::LATITUDE_REF_NORTH && $normalized !== self::LATITUDE_REF_SOUTH) { if ($normalized === self::LATITUDE_REF_NORTH || $normalized === self::LATITUDE_REF_SOUTH) {
throw new \InvalidArgumentException(sprintf('Invalid latitude reference "%s" (expecting "%s" or "%s").', $value, self::LATITUDE_REF_NORTH, self::LATITUDE_REF_SOUTH));
}
$this->latitude_ref = $normalized; $this->latitude_ref = $normalized;
}
break; break;
case self::FULL_GEO_NOTATION: case self::FULL_GEO_NOTATION:
@@ -111,8 +109,6 @@ class GpsPosition
$lon = $v; $lon = $v;
} }
break; break;
default:
throw new \InvalidArgumentException(sprintf('Unsupported reference "%s", should be N|S|E|W.', $match[4]));
} }
} }
if($lat !== null && $lon != null) { if($lat !== null && $lon != null) {