From d81cb40c880dfaeb203eeba6c21189c9e2995c49 Mon Sep 17 00:00:00 2001 From: reimar Date: Thu, 9 Mar 2006 22:20:20 +0000 Subject: free resources when load_raw fails git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@17792 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libvo/font_load.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'libvo') diff --git a/libvo/font_load.c b/libvo/font_load.c index e7473f1250..be445de86a 100644 --- a/libvo/font_load.c +++ b/libvo/font_load.c @@ -17,15 +17,15 @@ raw_file* load_raw(char *name,int verbose){ raw_file* raw=malloc(sizeof(raw_file)); unsigned char head[32]; FILE *f=fopen(name,"rb"); - if(!f) return NULL; // can't open - if(fread(head,32,1,f)<1) return NULL; // too small - if(memcmp(head,"mhwanh",6)) return NULL; // not raw file + if(!f) goto err_out; // can't open + if(fread(head,32,1,f)<1) goto err_out; // too small + if(memcmp(head,"mhwanh",6)) goto err_out; // not raw file raw->w=head[8]*256+head[9]; raw->h=head[10]*256+head[11]; raw->c=head[12]*256+head[13]; if(raw->w == 0) // 2 bytes were not enough for the width... read 4 bytes from the end of the header raw->w = ((head[28]*0x100 + head[29])*0x100 + head[30])*0x100 + head[31]; - if(raw->c>256) return NULL; // too many colors!? + if(raw->c>256) goto err_out; // too many colors!? mp_msg(MSGT_OSD, MSGL_DBG2, "RAW: %s %d x %d, %d colors\n",name,raw->w,raw->h,raw->c); if(raw->c){ raw->pal=malloc(raw->c*3); @@ -39,6 +39,12 @@ raw_file* load_raw(char *name,int verbose){ fread(raw->bmp,raw->h*raw->w*bpp,1,f); fclose(f); return raw; + +err_out: + if (f) + fclose(f); + free(raw); + return NULL; } extern int sub_unicode; -- cgit v1.2.3