Skip to content

Commit

Permalink
Fix some static analysis minor defects
Browse files Browse the repository at this point in the history
- fix comparison of uint64_t with SIZE_MAX for platforms where
  uint64_t and size_t are different
- do not compare two floats for equality
  • Loading branch information
vrabaud committed Jan 13, 2025
1 parent e7b34a1 commit 53dc07c
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
5 changes: 3 additions & 2 deletions src/gainmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,13 @@ static float avifGetGainMapWeight(float hdrHeadroom, const avifGainMap * gainMap
{
const float baseHdrHeadroom = avifUnsignedFractionToFloat(gainMap->baseHdrHeadroom);
const float alternateHdrHeadroom = avifUnsignedFractionToFloat(gainMap->alternateHdrHeadroom);
if (baseHdrHeadroom == alternateHdrHeadroom) {
const float diffHdrHeadroom = alternateHdrHeadroom - baseHdrHeadroom;
if (diffHdrHeadroom == 0.f) {
// Do not apply the gain map if the HDR headroom is the same.
// This case is not handled in the specification and does not make practical sense.
return 0.0f;
}
const float w = AVIF_CLAMP((hdrHeadroom - baseHdrHeadroom) / (alternateHdrHeadroom - baseHdrHeadroom), 0.0f, 1.0f);
const float w = AVIF_CLAMP((hdrHeadroom - baseHdrHeadroom) / diffHdrHeadroom, 0.0f, 1.0f);
return (alternateHdrHeadroom < baseHdrHeadroom) ? -w : w;
}

Expand Down
8 changes: 8 additions & 0 deletions src/read.c
Original file line number Diff line number Diff line change
Expand Up @@ -1138,9 +1138,11 @@ static avifResult avifDecoderItemMaxExtent(const avifDecoderItem * item, const a

outExtent->offset = minOffset;
const uint64_t extentLength = maxOffset - minOffset;
#if UINT64_MAX != SIZE_MAX
if (extentLength > SIZE_MAX) {
return AVIF_RESULT_BMFF_PARSE_FAILED;
}
#endif
outExtent->size = (size_t)extentLength;
return AVIF_RESULT_OK;
}
Expand Down Expand Up @@ -1956,10 +1958,12 @@ static avifResult avifParseItemLocationBox(avifMeta * meta, const uint8_t * raw,
}
uint64_t offset = baseOffset + extentOffset;
extent->offset = offset;
#if UINT64_MAX != SIZE_MAX
if (extentLength > SIZE_MAX) {
avifDiagnosticsPrintf(diag, "Item ID [%u] contains an extent length which overflows: [%" PRIu64 "]", itemID, extentLength);
return AVIF_RESULT_BMFF_PARSE_FAILED;
}
#endif
extent->size = (size_t)extentLength;
if (extent->size > SIZE_MAX - item->size) {
avifDiagnosticsPrintf(diag,
Expand Down Expand Up @@ -4752,9 +4756,11 @@ static avifResult avifExtentMerge(avifExtent * dst, const avifExtent * src)
const uint64_t maxExtent2 = src->offset + src->size;
dst->offset = AVIF_MIN(minExtent1, minExtent2);
const uint64_t extentLength = AVIF_MAX(maxExtent1, maxExtent2) - dst->offset;
#if UINT64_MAX != SIZE_MAX
if (extentLength > SIZE_MAX) {
return AVIF_RESULT_BMFF_PARSE_FAILED;
}
#endif
dst->size = (size_t)extentLength;
return AVIF_RESULT_OK;
}
Expand Down Expand Up @@ -4824,9 +4830,11 @@ static avifResult avifDecoderPrepareSample(avifDecoder * decoder, avifDecodeSamp
avifDecoderItem * item;
AVIF_CHECKRES(avifMetaFindOrCreateItem(decoder->data->meta, sample->itemID, &item));
avifROData itemContents;
#if UINT64_MAX != SIZE_MAX
if (sample->offset > SIZE_MAX) {
return AVIF_RESULT_BMFF_PARSE_FAILED;
}
#endif
size_t offset = (size_t)sample->offset;
avifResult readResult = avifDecoderItemRead(item, decoder->io, &itemContents, offset, bytesToRead, &decoder->diag);
if (readResult != AVIF_RESULT_OK) {
Expand Down

0 comments on commit 53dc07c

Please sign in to comment.