From 9a3f5ff977951781453fbe1e597dbd6eb5f7494a Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sun, 11 Oct 2009 23:15:38 +0200
Subject: riff, aiff: fixed "limited range" gcc warning

On 32 bit systems with large file support enabled (i.e. "sizeof(off_t)
> sizeof(size_t)") gcc emits a warning because a size_t cast to off_t
can never become negative.
---
 src/riff.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

(limited to 'src/riff.c')

diff --git a/src/riff.c b/src/riff.c
index 7227fd3c8..a8ea9dd42 100644
--- a/src/riff.c
+++ b/src/riff.c
@@ -83,6 +83,11 @@ riff_seek_id3(FILE *file)
 			return 0;
 
 		size = GUINT32_FROM_LE(chunk.size);
+		if (size > G_MAXINT32)
+			/* too dangerous, bail out: possible integer
+			   underflow when casting to off_t */
+			return 0;
+
 		if (size % 2 != 0)
 			/* pad byte */
 			++size;
@@ -91,11 +96,6 @@ riff_seek_id3(FILE *file)
 			/* found it! */
 			return size;
 
-		if ((off_t)size < 0)
-			/* integer underflow after cast to signed
-			   type */
-			return 0;
-
 		ret = fseek(file, size, SEEK_CUR);
 		if (ret != 0)
 			return 0;
-- 
cgit v1.2.3