Skip to content

Commit

Permalink
Backport libgd commit
Browse files Browse the repository at this point in the history
  • Loading branch information
andypost authored and nikic committed Jul 22, 2021
1 parent 9e787d5 commit bb9ef2b
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions ext/gd/libgd/gd_avif.c
Expand Up @@ -142,7 +142,7 @@ static avifBool isAvifSrgbImage(avifImage *avifIm) {
*/
static avifBool isAvifError(avifResult result, const char *msg) {
if (result != AVIF_RESULT_OK) {
gd_error("avif error - %s: %s", msg, avifResultToString(result));
gd_error("avif error - %s: %s\n", msg, avifResultToString(result));
return AVIF_TRUE;
}

Expand All @@ -168,13 +168,18 @@ static avifResult readFromCtx(avifIO *io, uint32_t readFlags, uint64_t offset, s
void *dataBuf = NULL;
gdIOCtx *ctx = (gdIOCtx *) io->data;

// readFlags is unsupported
if (readFlags != 0) {
return AVIF_RESULT_IO_ERROR;
}

// TODO: if we set sizeHint, this will be more efficient.

if (offset > LONG_MAX || size < 0)
if (offset > INT_MAX || size > INT_MAX)
return AVIF_RESULT_IO_ERROR;

// Try to seek offset bytes forward. If we pass the end of the buffer, throw an error.
if (!ctx->seek(ctx, offset))
if (!ctx->seek(ctx, (int) offset))
return AVIF_RESULT_IO_ERROR;

dataBuf = avifAlloc(size);
Expand All @@ -185,7 +190,7 @@ static avifResult readFromCtx(avifIO *io, uint32_t readFlags, uint64_t offset, s

// Read the number of bytes requested.
// If getBuf() returns a negative value, that means there was an error.
int charsRead = ctx->getBuf(ctx, dataBuf, size);
int charsRead = ctx->getBuf(ctx, dataBuf, (int) size);
if (charsRead < 0) {
avifFree(dataBuf);
return AVIF_RESULT_IO_ERROR;
Expand Down Expand Up @@ -330,7 +335,7 @@ gdImagePtr gdImageCreateFromAvifPtr(int size, void *data)
*/
gdImagePtr gdImageCreateFromAvifCtx (gdIOCtx *ctx)
{
int x, y;
uint32_t x, y;
gdImage *im = NULL;
avifResult result;
avifIO *io;
Expand Down Expand Up @@ -465,7 +470,7 @@ void gdImageAvifCtx(gdImagePtr im, gdIOCtx *outfile, int quality, int speed)

uint32_t val;
uint8_t *p;
int x, y;
uint32_t x, y;

if (im == NULL)
return;
Expand Down

0 comments on commit bb9ef2b

Please sign in to comment.