aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2009-10-11 23:15:38 +0200
committerMax Kellermann <max@duempel.org>2009-10-11 23:15:38 +0200
commit9a3f5ff977951781453fbe1e597dbd6eb5f7494a (patch)
tree25496e5bd1aa6d3e9c1acc79dc4180e41a32ec83
parenta1d868eb56bab5063f367e392624e3b3de5ea4d3 (diff)
downloadmpd-9a3f5ff977951781453fbe1e597dbd6eb5f7494a.tar.gz
mpd-9a3f5ff977951781453fbe1e597dbd6eb5f7494a.tar.xz
mpd-9a3f5ff977951781453fbe1e597dbd6eb5f7494a.zip
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.
-rw-r--r--NEWS2
-rw-r--r--src/aiff.c10
-rw-r--r--src/riff.c10
3 files changed, 12 insertions, 10 deletions
diff --git a/NEWS b/NEWS
index 311667f58..08057a86e 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
ver 0.15.5 (2009/??/??)
* input:
- curl: don't abort if a packet has only metadata
+* tags:
+ - riff, aiff: fixed "limited range" gcc warning
* decoder_thread: change the fallback decoder name to "mad"
diff --git a/src/aiff.c b/src/aiff.c
index f77e86d2b..d4bec628b 100644
--- a/src/aiff.c
+++ b/src/aiff.c
@@ -84,6 +84,11 @@ aiff_seek_id3(FILE *file)
return 0;
size = GUINT32_FROM_BE(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;
@@ -92,11 +97,6 @@ aiff_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;
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;