mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 20:20:07 +00:00
Do proper bounds checking in formats (bug #1356)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2694 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -183,8 +183,9 @@ static int g729_seek(struct ast_filestream *fs, long sample_offset, int whence)
|
|||||||
offset = max - bytes;
|
offset = max - bytes;
|
||||||
if (whence != SEEK_FORCECUR) {
|
if (whence != SEEK_FORCECUR) {
|
||||||
offset = (offset > max)?max:offset;
|
offset = (offset > max)?max:offset;
|
||||||
offset = (offset < min)?min:offset;
|
|
||||||
}
|
}
|
||||||
|
// protect against seeking beyond begining.
|
||||||
|
offset = (offset < min)?min:offset;
|
||||||
if (lseek(fs->fd, offset, SEEK_SET) < 0)
|
if (lseek(fs->fd, offset, SEEK_SET) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -197,9 +197,10 @@ static int gsm_seek(struct ast_filestream *fs, long sample_offset, int whence)
|
|||||||
offset = distance + cur;
|
offset = distance + cur;
|
||||||
else if(whence == SEEK_END)
|
else if(whence == SEEK_END)
|
||||||
offset = max - distance;
|
offset = max - distance;
|
||||||
|
// Always protect against seeking past the begining.
|
||||||
|
offset = (offset < min)?min:offset;
|
||||||
if (whence != SEEK_FORCECUR) {
|
if (whence != SEEK_FORCECUR) {
|
||||||
offset = (offset > max)?max:offset;
|
offset = (offset > max)?max:offset;
|
||||||
offset = (offset < min)?min:offset;
|
|
||||||
} else if (offset > max) {
|
} else if (offset > max) {
|
||||||
int i;
|
int i;
|
||||||
lseek(fs->fd, 0, SEEK_END);
|
lseek(fs->fd, 0, SEEK_END);
|
||||||
|
@@ -172,8 +172,9 @@ static int pcm_seek(struct ast_filestream *fs, long sample_offset, int whence)
|
|||||||
offset = max - sample_offset;
|
offset = max - sample_offset;
|
||||||
if (whence != SEEK_FORCECUR) {
|
if (whence != SEEK_FORCECUR) {
|
||||||
offset = (offset > max)?max:offset;
|
offset = (offset > max)?max:offset;
|
||||||
offset = (offset < min)?min:offset;
|
|
||||||
}
|
}
|
||||||
|
// always protect against seeking past begining.
|
||||||
|
offset = (offset < min)?min:offset;
|
||||||
return lseek(fs->fd, offset, SEEK_SET);
|
return lseek(fs->fd, offset, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -253,8 +253,9 @@ static int pcm_seek(struct ast_filestream *fs, long sample_offset, int whence)
|
|||||||
offset = max - sample_offset;
|
offset = max - sample_offset;
|
||||||
if (whence != SEEK_FORCECUR) {
|
if (whence != SEEK_FORCECUR) {
|
||||||
offset = (offset > max)?max:offset;
|
offset = (offset > max)?max:offset;
|
||||||
offset = (offset < min)?min:offset;
|
|
||||||
}
|
}
|
||||||
|
// Always protect against seeking past begining
|
||||||
|
offset = (offset < min)?min:offset;
|
||||||
return lseek(fs->fd, offset, SEEK_SET);
|
return lseek(fs->fd, offset, SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -525,8 +525,9 @@ static int wav_seek(struct ast_filestream *fs, long sample_offset, int whence)
|
|||||||
offset = max - samples;
|
offset = max - samples;
|
||||||
if (whence != SEEK_FORCECUR) {
|
if (whence != SEEK_FORCECUR) {
|
||||||
offset = (offset > max)?max:offset;
|
offset = (offset > max)?max:offset;
|
||||||
offset = (offset < min)?min:offset;
|
|
||||||
}
|
}
|
||||||
|
// always protect the header space.
|
||||||
|
offset = (offset < min)?min:offset;
|
||||||
return lseek(fs->fd,offset,SEEK_SET);
|
return lseek(fs->fd,offset,SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -493,8 +493,9 @@ static int wav_seek(struct ast_filestream *fs, long sample_offset, int whence)
|
|||||||
offset = distance + cur;
|
offset = distance + cur;
|
||||||
else if(whence == SEEK_END)
|
else if(whence == SEEK_END)
|
||||||
offset = max - distance;
|
offset = max - distance;
|
||||||
|
// always protect against seeking past end of header
|
||||||
|
offset = (offset < min)?min:offset;
|
||||||
if (whence != SEEK_FORCECUR) {
|
if (whence != SEEK_FORCECUR) {
|
||||||
offset = (offset < min)?min:offset;
|
|
||||||
offset = (offset > max)?max:offset;
|
offset = (offset > max)?max:offset;
|
||||||
} else if (offset > max) {
|
} else if (offset > max) {
|
||||||
int i;
|
int i;
|
||||||
|
Reference in New Issue
Block a user