From: <sba...@us...> - 2014-02-16 22:45:45
|
Revision: 5071 http://sourceforge.net/p/fuse-emulator/code/5071 Author: sbaldovi Date: 2014-02-16 22:45:42 +0000 (Sun, 16 Feb 2014) Log Message: ----------- Fix leaks and possible null pointer dereferences (thanks, cppcheck). Modified Paths: -------------- trunk/fuse-utils/fmfconv.c trunk/fuse-utils/hacking/ChangeLog trunk/fuse-utils/raw2hdf.c trunk/fuse-utils/rzxtool.c trunk/fuse-utils/scl2trd.c trunk/fuse-utils/snap2tzx.c trunk/fuse-utils/snapconv.c trunk/fuse-utils/tape2wav.c Modified: trunk/fuse-utils/fmfconv.c =================================================================== --- trunk/fuse-utils/fmfconv.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/fmfconv.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -334,16 +334,20 @@ int alloc_sound_buff( size_t len ) { + libspectrum_signed_byte *ptr = NULL; + if( sound_buf_len < len ) { len = ( ( len * 3 / 2 ) / SOUND_CHUNK_LEN + 1 ) * SOUND_CHUNK_LEN; if( sound_buf_len == 0 ) { sound8 = malloc( len ); } else { + ptr = sound8; sound8 = realloc( sound8, len ); } if( sound8 == NULL ) { printe( "\n\nMemory (re)allocation error.\n" ); + free( ptr ); return ERR_OUTOFMEM; } sound16 = (void *)sound8; Modified: trunk/fuse-utils/hacking/ChangeLog =================================================================== --- trunk/fuse-utils/hacking/ChangeLog 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/hacking/ChangeLog 2014-02-16 22:45:42 UTC (rev 5071) @@ -435,3 +435,6 @@ (part of bug #305) (Sergio). 20140113 rzxdump.c: show block number as is needed for some operations with rzxtool (Sergio). +20140216 fmfconv.c,raw2hdf.c,rzxtool.c,scl2trd.c,snap2tzx.c,snapconv.c, + tape2wav.c: fix leaks and possible null pointer dereferences (thanks, + cppcheck) (Sergio). Modified: trunk/fuse-utils/raw2hdf.c =================================================================== --- trunk/fuse-utils/raw2hdf.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/raw2hdf.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -219,17 +219,25 @@ if( !hdf ) { fprintf( stderr, "%s: error opening '%s': %s\n", progname, hdf_filename, strerror( errno ) ); + fclose( raw ); return 1; } error = copy_data( raw, hdf, &byte_count, raw_filename, hdf_filename, version ); - if( error ) return error; + if( error ) { + fclose( hdf ); + fclose( raw ); + return error; + } fclose( raw ); error = write_header( hdf, byte_count, hdf_filename, version ); - if( error ) return error; + if( error ) { + fclose( hdf ); + return error; + } fclose( hdf ); Modified: trunk/fuse-utils/rzxtool.c =================================================================== --- trunk/fuse-utils/rzxtool.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/rzxtool.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -111,6 +111,7 @@ if( bytes != length ) { fprintf( stderr, "%s: wrote only %lu of %lu bytes to `%s'\n", progname, (unsigned long)bytes, (unsigned long)length, filename ); + fclose( f ); return 1; } @@ -263,6 +264,7 @@ if( !comma ) { fprintf( stderr, "%s: no comma found in argument `%s'\n", progname, argument ); + free( buffer ); return 1; } Modified: trunk/fuse-utils/scl2trd.c =================================================================== --- trunk/fuse-utils/scl2trd.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/scl2trd.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -124,9 +124,9 @@ fh = fopen(newname, "wb"); if (fh) { mem = (unsigned char *) malloc(BLOCKSIZE); - memset(mem, 0, BLOCKSIZE); if (mem) { + memset(mem, 0, BLOCKSIZE); memcpy(&mem[TRD_DIRSTART], template, TRD_DIRLEN); strncpy((char*)&mem[TRD_NAMEOFFSET], "Fuse", TRD_MAXNAMELENGTH); fwrite((void *) mem, 1, BLOCKSIZE, fh); @@ -136,8 +136,8 @@ fwrite((void *) mem, 1, BLOCKSIZE, fh); free(mem); - fclose(fh); } + fclose(fh); } if ((TRD = open(newname, O_RDWR | O_BINARY)) == -1) { Modified: trunk/fuse-utils/snap2tzx.c =================================================================== --- trunk/fuse-utils/snap2tzx.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/snap2tzx.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -1165,6 +1165,7 @@ print_error( "could read only %lu bytes from '%s'", (unsigned long)count, filename ); } + fclose( f ); return 1; } @@ -1465,6 +1466,7 @@ (unsigned long)written, (unsigned long)length, filename ); } free( buffer ); + fclose( f ); return 1; } Modified: trunk/fuse-utils/snapconv.c =================================================================== --- trunk/fuse-utils/snapconv.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/snapconv.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -159,10 +159,12 @@ if( fwrite( buffer, 1, length, f ) != length ) { fprintf( stderr, "%s: error writing to '%s'\n", progname, argv[1] ); free( buffer ); + fclose( f ); return 1; } free( buffer ); - + fclose( f ); + return 0; } Modified: trunk/fuse-utils/tape2wav.c =================================================================== --- trunk/fuse-utils/tape2wav.c 2014-02-09 23:15:25 UTC (rev 5070) +++ trunk/fuse-utils/tape2wav.c 2014-02-16 22:45:42 UTC (rev 5071) @@ -109,7 +109,7 @@ static int write_tape( char *filename, libspectrum_tape *tape ) { - libspectrum_byte *buffer; size_t length; + libspectrum_byte *buffer, *ptr; size_t length; size_t tape_length = 0; libspectrum_error error; short level = 0; /* The last level output to this block */ @@ -176,8 +176,10 @@ while( tape_length + pulse_length > length ) { length *= 2; + ptr = buffer; buffer = realloc( buffer, length ); if( !buffer ) { + free( ptr ); fprintf( stderr, "%s: unable to allocate memory for conversion buffer\n", progname ); return 1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |