8000 Merge pull request #6 from vchandla/master · g-coder/midikit@9b275ce · GitHub
[go: up one dir, main page]

Skip to content

Commit 9b275ce

Browse files
committed
Merge pull request jpommerening#6 from vchandla/master
fixing memory leaks and other issues reported by Coverity Prevent. * out-of-bounds write errors * unchecked socket() errors * memset() on sockaddr_in * integer overflows
2 parents 43e19d7 + 044d4b9 commit 9b275ce

File tree

6 files changed

+17
-5
lines changed

6 files changed

+17
-5
lines changed

driver/applemidi/applemidi.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,13 +170,15 @@ static int _applemidi_connect( struct MIDIDriverAppleMIDI * driver ) {
170170
struct sockaddr_in addr;
171171
int result = 0;
172172

173+
memset(&addr, 0, sizeof(addr));
173174
if( driver->control_socket <= 0 ) {
174175
addr.sin_family = AF_INET;
175176
addr.sin_addr.s_addr = INADDR_ANY;
176177
addr.sin_port = htons( driver->port );
177178

178179
driver->control_socket = socket( PF_INET, SOCK_DGRAM, 0 );
179-
result = bind( driver->control_socket, (struct sockaddr *) &addr, sizeof(addr) );
180+
if (driver->control_socket != -1)
181+
result = bind( driver->control_socket, (struct sockaddr *) &addr, sizeof(addr) );
180182
}
181183

182184
if( driver->rtp_socket <= 0 ) {
@@ -185,7 +187,8 @@ static int _applemidi_connect( struct MIDIDriverAppleMIDI * driver ) {
185187
addr.sin_port = htons( driver->port + 1 );
186188

187189
driver->rtp_socket = socket( PF_INET, SOCK_DGRAM, 0 );
188-
result = bind( driver->rtp_socket, (struct sockaddr *) &addr, sizeof(addr) );
190+
if (driver->control_socket != -1)
191+
result = bind( driver->rtp_socket, (struct sockaddr *) &addr, sizeof(addr) );
189192
}
190193

191194
return result;

driver/osc/osc.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,17 @@ struct MIDIDriverOSC {
2525
struct MIDIDriverOSC * MIDIDriverOSCCreate( ) {
2626
struct MIDIDriverOSC * driver = malloc( sizeof( struct MIDIDriverOSC ) );
2727
struct sockaddr_in addr;
28+
memset(&addr, 0, sizeof(addr));
2829

2930
driver->refs = 1;
3031
driver->socket = socket( PF_INET, SOCK_DGRAM, 0 );
3132

33+
if (driver->socket != -1)
34+
{
35+
free (driver);
36+
return NULL;
37+
}
38+
3239
addr.sin_family = AF_INET;
3340
addr.sin_port = 5006;
3441
addr.sin_addr.s_addr = INADDR_ANY;

midi/clock.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ static void _init_clock_posix( struct MIDIClock * clock ) {
167167
static unsigned long long _timestamp_posix( void ) {
168168
static struct timespec ts;
169169
clock_gettime( POSIX_CLOCK_TYPE, &ts );
170-
return (ts.tv_sec * NSEC_PER_SEC + ts.tv_nsec);
170+
return ((unsigned long long)tv.tv_sec * USEC_PER_SEC + tv.tv_usec);
171171
}
172172
#endif
173173

@@ -190,7 +190,7 @@ static void _init_clock_sys( struct MIDIClock * clock ) {
190190
static unsigned long long _timestamp_sys( void ) {
191191
static struct timeval tv;
192192
gettimeofday( &tv, NULL );
193-
return (tv.tv_sec * USEC_PER_SEC + tv.tv_usec);
193+
return ((unsigned long long)tv.tv_sec * USEC_PER_SEC + tv.tv_usec);
194194
}
195195
#endif
196196

midi/device.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ static int _recv_cc_omni( struct MIDIDevice * device, MIDIChannel channel,
145145
MIDIControl control, MIDIValue value ) {
146146
int result = 0, i;
147147
struct MIDIController * ctl;
148-
struct MIDIController * recv[N_CHANNEL] = { NULL };
148+
struct MIDIController * recv[N_CHANNEL+1] = { NULL };
149149
MIDIChannel c;
150150
MIDIPrecond( device != NULL, EFAULT );
151151

midi/event.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ struct MIDIEvent * MIDIEventCreate( size_t id, void * info, char * message, ...
6666
do {
6767
if( buffer == NULL ) {
6868
MIDIError( ENOMEM, "Could not allocate space for static buffer." );
69+
free (event);
6970
return NULL;
7071
}
7172
required = vsnprintf( buffer, length-1, message, vargs );

midi/port.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ struct MIDIPort * MIDIPortCreate( char * name, int mode, void * target,
231231
}
232232
if( port->ports == NULL ) {
233233
/* probably ENOMEM, in that case, error code is already set by MIDIList */
234+
free (port->name);
234235
free( port );
235236
return NULL;
236237
}

0 commit comments

Comments
 (0)
0