shithub: dumb

Download patch

ref: 9b377f8d7f76159d7f227c727aeae7e16fd1db7b
parent: e12facc69845ef4f16bc70f755dc7cb898cede41
author: Chris Moeller <[email protected]>
date: Sat Jun 15 15:48:23 EDT 2013

Cleaned up several warnings, including a buffer
overflow in the DSMF reader

--- a/dumb/include/internal/it.h
+++ b/dumb/include/internal/it.h
@@ -210,7 +210,7 @@
 struct IT_SAMPLE
 {
 	unsigned char name[35];
-	unsigned char filename[14];
+	unsigned char filename[15];
 	unsigned char flags;
 	unsigned char global_volume;
 	unsigned char default_volume;
--- a/dumb/src/it/readokt.c
+++ b/dumb/src/it/readokt.c
@@ -486,7 +486,7 @@
 
 	/* And finally, the sample data */
 	k = get_chunk_count(mod, DUMB_ID('S','B','O','D'));
-	for (i = 0, j = 0; i < sigdata->n_samples, j < k; i++) {
+	for (i = 0, j = 0; i < sigdata->n_samples && j < k; i++) {
 		if (sigdata->sample[i].flags & IT_SAMPLE_EXISTS) {
 			chunk = get_chunk_by_type(mod, DUMB_ID('S','B','O','D'), j);
 			if (it_okt_read_sample_data(&sigdata->sample[i], (const char *)chunk->data, chunk->size)) {
@@ -503,7 +503,7 @@
 
 	chunk = get_chunk_by_type(mod, DUMB_ID('C','M','O','D'), 0);
 
-	for (i = 0, j = 0; i < n_channels, j < 4; j++) {
+	for (i = 0, j = 0; i < n_channels && j < 4; j++) {
 		k = (chunk->data[j * 2] << 8) | chunk->data[j * 2 + 1];
 		l = (j == 1 || j == 2) ? 48 : 16;
 		if (k == 0) {
--- a/dumb/src/it/readpsm.c
+++ b/dumb/src/it/readpsm.c
@@ -81,7 +81,7 @@
 		panpos = data[0x43];
 		defvol = data[0x44];
 		samplerate = data[0x49] | (data[0x4A] << 8) | (data[0x4B] << 16) | (data[0x4C] << 24);
-	} else if (version == PSMV_NEW) {
+	} else /*if (version == PSMV_NEW)*/ {
 		memcpy(sample->name, data + 0x11, 34);
 		sample->name[34] = 0;
 
@@ -154,7 +154,7 @@
 		if (len < 10) return -1;
 		data += 8;
 		len -= 8;
-	} else if (version == PSMV_NEW) {
+	} else /*if (version == PSMV_NEW)*/ {
 		if (len < 14) return -1;
 		data += 12;
 		len -= 12;
@@ -291,7 +291,7 @@
 				if (version == PSMV_OLD) {
 					if ((data[pos] < 0x80)) entry->note = (data[pos]>>4)*12+(data[pos]&0x0f)+12;
 					else entry->mask &= ~IT_ENTRY_NOTE;
-				} else if (version == PSMV_NEW) {
+				} else /*if (version == PSMV_NEW)*/ {
 					if ((data[pos]) && (data[pos] < 84)) entry->note = data[pos] + 35;
 					else entry->mask &= ~IT_ENTRY_NOTE;
 				}
@@ -315,25 +315,25 @@
 					case 1:
 						entry->effect = IT_VOLUME_SLIDE;
 						if (version == PSMV_OLD) entry->effectvalue = ((length&0x1e)<<3) | 0xF;
-						else if (version == PSMV_NEW) entry->effectvalue = (length<<4) | 0xF;
+						else /*if (version == PSMV_NEW)*/ entry->effectvalue = (length<<4) | 0xF;
 						break;
 
 					case 2:
 						entry->effect = IT_VOLUME_SLIDE;
 						if (version == PSMV_OLD) entry->effectvalue = (length << 3) & 0xF0;
-						else if (version == PSMV_NEW) entry->effectvalue = (length << 4) & 0xF0;
+						else /*if (version == PSMV_NEW)*/ entry->effectvalue = (length << 4) & 0xF0;
 						break;
 
 					case 3:
 						entry->effect = IT_VOLUME_SLIDE;
 						if (version == PSMV_OLD) entry->effectvalue = (length >> 1) | 0xF0;
-						else if (version == PSMV_NEW) entry->effectvalue = length | 0xF0;
+						else /*if (version == PSMV_NEW)*/ entry->effectvalue = length | 0xF0;
 						break;
 
 					case 4:
 						entry->effect = IT_VOLUME_SLIDE;
 						if (version == PSMV_OLD) entry->effectvalue = (length >> 1) & 0xF;
-						else if (version == PSMV_NEW) entry->effectvalue = length & 0xF;
+						else /*if (version == PSMV_NEW)*/ entry->effectvalue = length & 0xF;
 						break;
 
 					case 12:
@@ -341,7 +341,7 @@
 						if (version == PSMV_OLD) {
 							if (length < 4) entry->effectvalue = length | 0xF0;
 							else entry->effectvalue = length >> 2;
-						} else if (version == PSMV_NEW) {
+						} else /*if (version == PSMV_NEW)*/ {
 							entry->effectvalue = length;
 						}
 						break;
@@ -351,7 +351,7 @@
 						if (version == PSMV_OLD) {
 							if (length < 4) entry->effectvalue = length | 0xF0;
 							else entry->effectvalue = length >> 2;
-						} else if (version == PSMV_NEW) {
+						} else /*if (version == PSMV_NEW)*/ {
 							entry->effectvalue = length;
 						}
 						break;
@@ -359,7 +359,7 @@
 					case 15:
 						entry->effect = IT_TONE_PORTAMENTO;
 						if (version == PSMV_OLD) entry->effectvalue = length >> 2;
-						else if (version == PSMV_NEW) entry->effectvalue = length;
+						else /*if (version == PSMV_NEW)*/ entry->effectvalue = length;
 						break;
 
 					case 0x15:
@@ -692,7 +692,7 @@
 							memcpy(event[n_events].data, ptr + 1, 4);
 							ptr += 5;
 							length -= 5;
-						} else if (found == PSMV_NEW) {
+						} else /*if (found == PSMV_NEW)*/ {
 							if (length < 9) goto error_ev;
 							memcpy(event[n_events].data, ptr + 1, 8);
 							ptr += 9;
@@ -812,7 +812,7 @@
 							n_patterns++;
 							break;
 						}
-					} else if (found == PSMV_NEW) {
+					} else /*if (found == PSMV_NEW)*/ {
 						if (length < 12) goto error_ev;
 						if (!pattcmp(ptr + 4, e->data, 8)) {
 							if (it_psm_process_pattern(&sigdata->pattern[n_patterns], ptr, length, speed, bpm, pan, vol, found)) goto error_ev;
@@ -1223,8 +1223,8 @@
 
 	if ( i < l )
 	{
-		na = strtoul( a + i, &p, 10 );
-		if ( p == a + i ) return 1;
+		na = strtoul( (const char *)a + i, &p, 10 );
+		if ( (const unsigned char *)p == a + i ) return 1;
 	}
 
 	for ( j = 0; j < l; ++j )
@@ -1234,8 +1234,8 @@
 
 	if ( j < l )
 	{
-		nb = strtoul( b + j, &p, 10 );
-		if ( p == b + j ) return -1;
+		nb = strtoul( (const char *)b + j, &p, 10 );
+		if ( (const unsigned char *)p == b + j ) return -1;
 	}
 
 	if ( i < j ) return -1;