diff --git a/web/packages/media/file-metadata.ts b/web/packages/media/file-metadata.ts index b431a24f76..2d1c963876 100644 --- a/web/packages/media/file-metadata.ts +++ b/web/packages/media/file-metadata.ts @@ -826,6 +826,7 @@ export const fileLocation = (file: EnteFile): Location | undefined => { const longitude = nullToUndefined(file.metadata.longitude); if (latitude === undefined || longitude === undefined) return undefined; + if (Number.isNaN(latitude) || Number.isNaN(longitude)) return undefined; return { latitude, longitude }; }; diff --git a/web/packages/new/photos/services/exif.ts b/web/packages/new/photos/services/exif.ts index 5c76398327..b880ebb7b0 100644 --- a/web/packages/new/photos/services/exif.ts +++ b/web/packages/new/photos/services/exif.ts @@ -51,13 +51,19 @@ export const parseExif = (tags: RawExifTags) => { /** * Parse GPS location from the metadata embedded in the file. + * + * - If a location is returned, then both latitude and longitude will be + * defined. + * - NaNs are ignored, and treated as if they are not defined. */ const parseLocation = (tags: RawExifTags) => { const latitude = tags.gps?.Latitude; const longitude = tags.gps?.Longitude; - return latitude !== undefined && longitude !== undefined - ? { latitude, longitude } - : undefined; + + if (latitude === undefined || longitude === undefined) return undefined; + if (Number.isNaN(latitude) || Number.isNaN(longitude)) return undefined; + + return { latitude, longitude }; }; /** diff --git a/web/packages/utils/ensure.ts b/web/packages/utils/ensure.ts index ec31167a68..7568de607f 100644 --- a/web/packages/utils/ensure.ts +++ b/web/packages/utils/ensure.ts @@ -8,10 +8,10 @@ export const ensureString = (v: unknown): string => { }; /** - * Throw an exception if the given value is not a number. + * Throw an exception if the given value is not a number or if it is NaN. */ export const ensureNumber = (v: unknown): number => { - if (typeof v != "number") + if (typeof v != "number" || Number.isNaN(v)) throw new Error(`Expected a number, instead found ${String(v)}`); return v; };