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