+++ /dev/null
-changeset: 5320:d7f11bf8b7c8
-user: Tony Vroon <chainsaw@gentoo.org>
-date: Sun Jan 23 00:28:36 2011 +0000
-summary: adplug: Two fixes (to protrack & rol) from Michael Schwendt, closes AUDPLUG-320.
-
-diff -r 9f9d51fa2975 -r d7f11bf8b7c8 src/adplug/core/protrack.cxx
---- a/src/adplug/core/protrack.cxx Fri Jan 21 23:28:39 2011 -0500
-+++ b/src/adplug/core/protrack.cxx Sun Jan 23 00:28:36 2011 +0000
-@@ -266,6 +266,10 @@
- else
- track--;
-
-+ if (track >= npats*nchans) { // prevent overflow
-+ songend = 1;
-+ return !songend;
-+ }
- AdPlug_LogWrite ("%3d%3d%2X%2X%2X|", tracks[track][row].note,
- tracks[track][row].inst, tracks[track][row].command,
- tracks[track][row].param1, tracks[track][row].param2);
-diff -r 9f9d51fa2975 -r d7f11bf8b7c8 src/adplug/core/rol.cxx
---- a/src/adplug/core/rol.cxx Fri Jan 21 23:28:39 2011 -0500
-+++ b/src/adplug/core/rol.cxx Sun Jan 23 00:28:36 2011 +0000
-@@ -257,6 +257,9 @@
- TVolumeEvents &vEvents = voiceData.volume_events;
- TPitchEvents &pEvents = voiceData.pitch_events;
-
-+ if (iEvents.empty()) {
-+ return; // prevent out-of-bounds access
-+ }
- if( !(voiceData.mEventStatus & CVoiceData::kES_InstrEnd ) &&
- iEvents[voiceData.next_instrument_event].time == mCurrTick )
- {
-@@ -271,6 +274,9 @@
- }
- }
-
-+ if (vEvents.empty()) {
-+ return; // prevent out-of-bounds access
-+ }
- if( !(voiceData.mEventStatus & CVoiceData::kES_VolumeEnd ) &&
- vEvents[voiceData.next_volume_event].time == mCurrTick )
- {
-@@ -314,6 +320,9 @@
- }
- }
-
-+ if (pEvents.empty()) {
-+ return; // prevent out-of-bounds access
-+ }
- if( !(voiceData.mEventStatus & CVoiceData::kES_PitchEnd ) &&
- pEvents[voiceData.next_pitch_event].time == mCurrTick )
- {
-@@ -454,6 +463,9 @@
- {
- int16 const num_tempo_events = f->readInt( 2 );
-
-+ if (num_tempo_events<0) {
-+ return;
-+ }
- mTempoEvents.reserve( num_tempo_events );
-
- for(int i=0; i<num_tempo_events; ++i)
-@@ -538,6 +550,9 @@
- binistream *bnk_file, SBnkHeader const &bnk_header )
- {
- int16 const number_of_instrument_events = f->readInt( 2 );
-+ if (number_of_instrument_events<0) {
-+ return;
-+ }
-
- TInstrumentEvents &instrument_events = voice.instrument_events;
-
-@@ -563,6 +578,9 @@
- void CrolPlayer::load_volume_events( binistream *f, CVoiceData &voice )
- {
- int16 const number_of_volume_events = f->readInt( 2 );
-+ if (number_of_volume_events<0) {
-+ return;
-+ }
-
- TVolumeEvents &volume_events = voice.volume_events;
-
-@@ -583,6 +601,9 @@
- void CrolPlayer::load_pitch_events( binistream *f, CVoiceData &voice )
- {
- int16 const number_of_pitch_events = f->readInt( 2 );
-+ if (number_of_pitch_events<0) {
-+ return;
-+ }
-
- TPitchEvents &pitch_events = voice.pitch_events;
-
-
+++ /dev/null
-
-# HG changeset patch
-# User John Lindgren <john.lindgren@tds.net>
-# Date 1295406442 18000
-# Node ID b2c94059fb28375515c0ca9b54a5b2f09c333375
-# Parent 3f1ab558c6cf557d226151e941b5113ccd154d73
-mtp_up: Use strrchr instead of rindex; fix potential 0x1 pointer dereference (patch from Carlo Bramini, AUDPLUG-323).
-
-diff -r 3f1ab558c6cf -r b2c94059fb28 src/mtp_up/filetype.c
---- a/src/mtp_up/filetype.c Tue Jan 18 01:19:25 2011 -0500
-+++ b/src/mtp_up/filetype.c Tue Jan 18 22:07:22 2011 -0500
-@@ -2,84 +2,76 @@
- #include "string.h"
- #include "filetype.h"
-
-+typedef struct {
-+ const char *ptype;
-+ const LIBMTP_filetype_t filetype;
-+} file_entry_t;
-+
-+/* This need to be kept constantly updated as new file types arrive. */
-+static const file_entry_t file_entries[] = {
-+ { "wav", LIBMTP_FILETYPE_WAV },
-+ { "mp3", LIBMTP_FILETYPE_MP3 },
-+ { "wma", LIBMTP_FILETYPE_WMA },
-+ { "ogg", LIBMTP_FILETYPE_OGG },
-+ { "mp4", LIBMTP_FILETYPE_MP4 },
-+ { "wmv", LIBMTP_FILETYPE_WMV },
-+ { "avi", LIBMTP_FILETYPE_AVI },
-+ { "mpeg", LIBMTP_FILETYPE_MPEG },
-+ { "mpg", LIBMTP_FILETYPE_MPEG },
-+ { "asf", LIBMTP_FILETYPE_ASF },
-+ { "qt", LIBMTP_FILETYPE_QT },
-+ { "mov", LIBMTP_FILETYPE_QT },
-+ { "wma", LIBMTP_FILETYPE_WMA },
-+ { "jpg", LIBMTP_FILETYPE_JPEG },
-+ { "jpeg", LIBMTP_FILETYPE_JPEG },
-+ { "jfif", LIBMTP_FILETYPE_JFIF },
-+ { "tif", LIBMTP_FILETYPE_TIFF },
-+ { "tiff", LIBMTP_FILETYPE_TIFF },
-+ { "bmp", LIBMTP_FILETYPE_BMP },
-+ { "gif", LIBMTP_FILETYPE_GIF },
-+ { "pic", LIBMTP_FILETYPE_PICT },
-+ { "pict", LIBMTP_FILETYPE_PICT },
-+ { "png", LIBMTP_FILETYPE_PNG },
-+ { "wmf", LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT },
-+ { "ics", LIBMTP_FILETYPE_VCALENDAR2 },
-+ { "exe", LIBMTP_FILETYPE_WINEXEC },
-+ { "com", LIBMTP_FILETYPE_WINEXEC },
-+ { "bat", LIBMTP_FILETYPE_WINEXEC },
-+ { "dll", LIBMTP_FILETYPE_WINEXEC },
-+ { "sys", LIBMTP_FILETYPE_WINEXEC },
-+ { "aac", LIBMTP_FILETYPE_AAC },
-+ { "mp2", LIBMTP_FILETYPE_MP2 },
-+ { "flac", LIBMTP_FILETYPE_FLAC },
-+ { "m4a", LIBMTP_FILETYPE_M4A },
-+ { "doc", LIBMTP_FILETYPE_DOC },
-+ { "xml", LIBMTP_FILETYPE_XML },
-+ { "xls", LIBMTP_FILETYPE_XLS },
-+ { "ppt", LIBMTP_FILETYPE_PPT },
-+ { "mht", LIBMTP_FILETYPE_MHT },
-+ { "jp2", LIBMTP_FILETYPE_JP2 },
-+ { "jpx", LIBMTP_FILETYPE_JPX }
-+};
-+
- /* Find the file type based on extension */
- LIBMTP_filetype_t
- find_filetype (const char * filename)
- {
-- char *ptype;
-- ptype = rindex(filename,'.')+1;
-- LIBMTP_filetype_t filetype;
-- /* This need to be kept constantly updated as new file types arrive. */
-- if (!strcasecmp (ptype, "wav")) {
-- filetype = LIBMTP_FILETYPE_WAV;
-- } else if (!strcasecmp (ptype, "mp3")) {
-- filetype = LIBMTP_FILETYPE_MP3;
-- } else if (!strcasecmp (ptype, "wma")) {
-- filetype = LIBMTP_FILETYPE_WMA;
-- } else if (!strcasecmp (ptype, "ogg")) {
-- filetype = LIBMTP_FILETYPE_OGG;
-- } else if (!strcasecmp (ptype, "mp4")) {
-- filetype = LIBMTP_FILETYPE_MP4;
-- } else if (!strcasecmp (ptype, "wmv")) {
-- filetype = LIBMTP_FILETYPE_WMV;
-- } else if (!strcasecmp (ptype, "avi")) {
-- filetype = LIBMTP_FILETYPE_AVI;
-- } else if (!strcasecmp (ptype, "mpeg") || !strcasecmp (ptype, "mpg")) {
-- filetype = LIBMTP_FILETYPE_MPEG;
-- } else if (!strcasecmp (ptype, "asf")) {
-- filetype = LIBMTP_FILETYPE_ASF;
-- } else if (!strcasecmp (ptype, "qt") || !strcasecmp (ptype, "mov")) {
-- filetype = LIBMTP_FILETYPE_QT;
-- } else if (!strcasecmp (ptype, "wma")) {
-- filetype = LIBMTP_FILETYPE_WMA;
-- } else if (!strcasecmp (ptype, "jpg") || !strcasecmp (ptype, "jpeg")) {
-- filetype = LIBMTP_FILETYPE_JPEG;
-- } else if (!strcasecmp (ptype, "jfif")) {
-- filetype = LIBMTP_FILETYPE_JFIF;
-- } else if (!strcasecmp (ptype, "tif") || !strcasecmp (ptype, "tiff")) {
-- filetype = LIBMTP_FILETYPE_TIFF;
-- } else if (!strcasecmp (ptype, "bmp")) {
-- filetype = LIBMTP_FILETYPE_BMP;
-- } else if (!strcasecmp (ptype, "gif")) {
-- filetype = LIBMTP_FILETYPE_GIF;
-- } else if (!strcasecmp (ptype, "pic") || !strcasecmp (ptype, "pict")) {
-- filetype = LIBMTP_FILETYPE_PICT;
-- } else if (!strcasecmp (ptype, "png")) {
-- filetype = LIBMTP_FILETYPE_PNG;
-- } else if (!strcasecmp (ptype, "wmf")) {
-- filetype = LIBMTP_FILETYPE_WINDOWSIMAGEFORMAT;
-- } else if (!strcasecmp (ptype, "ics")) {
-- filetype = LIBMTP_FILETYPE_VCALENDAR2;
-- } else if (!strcasecmp (ptype, "exe") || !strcasecmp (ptype, "com") ||
-- !strcasecmp (ptype, "bat") || !strcasecmp (ptype, "dll") ||
-- !strcasecmp (ptype, "sys")) {
-- filetype = LIBMTP_FILETYPE_WINEXEC;
-- } else if (!strcasecmp (ptype, "aac")) {
-- filetype = LIBMTP_FILETYPE_AAC;
-- } else if (!strcasecmp (ptype, "mp2")) {
-- filetype = LIBMTP_FILETYPE_MP2;
-- } else if (!strcasecmp (ptype, "flac")) {
-- filetype = LIBMTP_FILETYPE_FLAC;
-- } else if (!strcasecmp (ptype, "m4a")) {
-- filetype = LIBMTP_FILETYPE_M4A;
-- } else if (!strcasecmp (ptype, "doc")) {
-- filetype = LIBMTP_FILETYPE_DOC;
-- } else if (!strcasecmp (ptype, "xml")) {
-- filetype = LIBMTP_FILETYPE_XML;
-- } else if (!strcasecmp (ptype, "xls")) {
-- filetype = LIBMTP_FILETYPE_XLS;
-- } else if (!strcasecmp (ptype, "ppt")) {
-- filetype = LIBMTP_FILETYPE_PPT;
-- } else if (!strcasecmp (ptype, "mht")) {
-- filetype = LIBMTP_FILETYPE_MHT;
-- } else if (!strcasecmp (ptype, "jp2")) {
-- filetype = LIBMTP_FILETYPE_JP2;
-- } else if (!strcasecmp (ptype, "jpx")) {
-- filetype = LIBMTP_FILETYPE_JPX;
-- } else {
-- /* Tagging as unknown file type */
-- filetype = LIBMTP_FILETYPE_UNKNOWN;
-- }
-- return filetype;
-+ char *ptype = strrchr(filename,'.');
-+ unsigned int n;
-+
-+ if (ptype != NULL)
-+ {
-+ /* Skip '.' char */
-+ ptype++;
-+
-+ /* Seach entry in the table */
-+ for (n=0; n<sizeof(file_entries)/sizeof(file_entries[0]); n++)
-+ {
-+ if (!strcasecmp (ptype, file_entries[n].ptype))
-+ return file_entries[n].filetype;
-+ }
-+ }
-+
-+ return LIBMTP_FILETYPE_UNKNOWN;
- }
-
-