From 9f7563f866f4e448cb06290e1ac277c9e5cf34f3 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Wed, 15 Jun 2011 16:04:05 -0400 Subject: [PATCH] Fix Timidity read_config_file() not closing the file when there is an error. Fixes Bugzilla #1230. Thanks to Ozkan Sezer for the patch! (transplanted from 65059e40a1502934c025c183514f26e6ef04d185) --- decoders/timidity/timidity.c | 37 +++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/decoders/timidity/timidity.c b/decoders/timidity/timidity.c index f7f324d..1cf4d1b 100644 --- a/decoders/timidity/timidity.c +++ b/decoders/timidity/timidity.c @@ -213,7 +213,7 @@ static int read_config_file(char *name) if (words < 2) { SNDDBG(("%s: line %d: No directory given\n", name, line)); - return -2; + goto fail; } for (i=1; i127) { SNDDBG(("%s: line %d: Drum set must be between 0 and 127\n", name, line)); - return -2; + goto fail; } if (!master_drumset[i]) { @@ -271,14 +271,14 @@ static int read_config_file(char *name) if (words < 2) { SNDDBG(("%s: line %d: No bank number given\n", name, line)); - return -2; + goto fail; } i=atoi(w[1]); if (i<0 || i>127) { SNDDBG(("%s: line %d: Tone bank must be between 0 and 127\n", name, line)); - return -2; + goto fail; } if (!master_tonebank[i]) { @@ -294,20 +294,20 @@ static int read_config_file(char *name) if ((words < 2) || (*w[0] < '0' || *w[0] > '9')) { SNDDBG(("%s: line %d: syntax error\n", name, line)); - return -2; + goto fail; } i=atoi(w[0]); if (i<0 || i>127) { SNDDBG(("%s: line %d: Program must be between 0 and 127\n", name, line)); - return -2; + goto fail; } if (!bank) { SNDDBG(("%s: line %d: Must specify tone bank or drum set before assignment\n", name, line)); - return -2; + goto fail; } if (bank->tone[i].name) free(bank->tone[i].name); @@ -321,7 +321,7 @@ static int read_config_file(char *name) if (!(cp=strchr(w[j], '='))) { SNDDBG(("%s: line %d: bad patch option %s\n", name, line, w[j])); - return -2; + goto fail; } *cp++=0; if (!strcmp(w[j], "amp")) @@ -331,7 +331,7 @@ static int read_config_file(char *name) { SNDDBG(("%s: line %d: amplification must be between 0 and %d\n", name, line, MAX_AMPLIFICATION)); - return -2; + goto fail; } bank->tone[i].amp=k; } @@ -342,7 +342,7 @@ static int read_config_file(char *name) { SNDDBG(("%s: line %d: note must be between 0 and 127\n", name, line)); - return -2; + goto fail; } bank->tone[i].note=k; } @@ -360,7 +360,7 @@ static int read_config_file(char *name) { SNDDBG(("%s: line %d: panning must be left, right, center, or between -100 and 100\n", name, line)); - return -2; + goto fail; } bank->tone[i].pan=k; } @@ -373,7 +373,7 @@ static int read_config_file(char *name) else { SNDDBG(("%s: line %d: keep must be env or loop\n", name, line)); - return -2; + goto fail; } } else if (!strcmp(w[j], "strip")) @@ -388,19 +388,22 @@ static int read_config_file(char *name) { SNDDBG(("%s: line %d: strip must be env, loop, or tail\n", name, line)); - return -2; + goto fail; } } else { SNDDBG(("%s: line %d: bad patch option %s\n", name, line, w[j])); - return -2; + goto fail; } } } } SDL_RWclose(rw); return 0; +fail: + SDL_RWclose(rw); + return -2; } int Timidity_Init_NoConfig()