fix: handle invalid GIF dimensions gracefully
Fix NaN aspectRatio when rehydrating GIFs from drafts by: 1. Adding validation in parseTenorGif to reject invalid dimensions (NaN, zero, or negative values) 2. Adding defensive checks in GifEmbed to fallback to 1:1 aspect ratio if dimensions are invalid 3. Adding defensive checks in composer ExternalEmbedGif to fallback to 16:9 if gif.media_formats.gif.dims is missing or invalid Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -114,11 +114,10 @@ export function GifEmbed({
|
||||
|
||||
let aspectRatio = 1
|
||||
if (params.dimensions) {
|
||||
aspectRatio = clamp(
|
||||
params.dimensions.width / params.dimensions.height,
|
||||
0.75,
|
||||
4,
|
||||
)
|
||||
const ratio = params.dimensions.width / params.dimensions.height
|
||||
if (!isNaN(ratio) && isFinite(ratio)) {
|
||||
aspectRatio = clamp(ratio, 0.75, 4)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
|
||||
@@ -558,6 +558,16 @@ export function parseTenorGif(urlp: URL):
|
||||
width: Number(w),
|
||||
}
|
||||
|
||||
// Validate dimensions are valid positive numbers
|
||||
if (
|
||||
isNaN(dimensions.height) ||
|
||||
isNaN(dimensions.width) ||
|
||||
dimensions.height <= 0 ||
|
||||
dimensions.width <= 0
|
||||
) {
|
||||
return {success: false}
|
||||
}
|
||||
|
||||
if (IS_WEB) {
|
||||
if (IS_WEB_SAFARI) {
|
||||
id = id.replace('AAAAC', 'AAAP1')
|
||||
|
||||
@@ -37,7 +37,13 @@ export const ExternalEmbedGif = ({
|
||||
)
|
||||
|
||||
const loadingStyle: ViewStyle = {
|
||||
aspectRatio: gif.media_formats.gif.dims[0] / gif.media_formats.gif.dims[1],
|
||||
aspectRatio: (() => {
|
||||
const dims = gif.media_formats.gif?.dims
|
||||
if (dims && dims[0] > 0 && dims[1] > 0) {
|
||||
return dims[0] / dims[1]
|
||||
}
|
||||
return 16 / 9 // Default aspect ratio
|
||||
})(),
|
||||
width: '100%',
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user