# HG changeset patch # User pl # Date 1008766446 0 # Node ID 178c562948ff40e63548a5ea3a5881516248f9fd # Parent 119d9400cc02c8db4c3f32ea5dabdebab0520367 checkings for malloc results (potential memleaks) btw: C functions in .h files is dirty :) diff -r 119d9400cc02 -r 178c562948ff libmpdemux/tvi_def.h --- a/libmpdemux/tvi_def.h Wed Dec 19 12:21:38 2001 +0000 +++ b/libmpdemux/tvi_def.h Wed Dec 19 12:54:06 2001 +0000 @@ -45,8 +45,9 @@ static void free_handle(tvi_handle_t *h) { - if (h->priv) - free(h->priv); - if (h) + if (h) { + if (h->priv) + free(h->priv); free(h); + } } diff -r 119d9400cc02 -r 178c562948ff libmpdemux/tvi_v4l.c --- a/libmpdemux/tvi_v4l.c Wed Dec 19 12:21:38 2001 +0000 +++ b/libmpdemux/tvi_v4l.c Wed Dec 19 12:54:06 2001 +0000 @@ -227,14 +227,14 @@ /* set video device name */ if (!device) - { - priv->video_device = (char *)malloc(strlen("/dev/video0")); - sprintf(priv->video_device, "/dev/video0"); - } + priv->video_device = strdup("/dev/video0"); else - { - priv->video_device = (char *)malloc(strlen(device)); - strcpy(priv->video_device, device); + priv->video_device = strdup(device); + + /* allocation failed */ + if (!priv->video_device) { + free_handle(h); + return(NULL); } return(h); @@ -278,6 +278,8 @@ mp_msg(MSGT_TV, MSGL_INFO, " Inputs: %d\n", priv->capability.channels); priv->channels = (struct video_channel *)malloc(sizeof(struct video_channel)*priv->capability.channels); + if (!priv->channels) + goto malloc_failed; memset(priv->channels, 0, sizeof(struct video_channel)*priv->capability.channels); for (i = 0; i < priv->capability.channels; i++) { @@ -357,10 +359,18 @@ /* video buffers */ priv->buf = (struct video_mmap *)malloc(priv->nbuf * sizeof(struct video_mmap)); + if (!priv->buf) + goto malloc_failed; memset(priv->buf, 0, priv->nbuf * sizeof(struct video_mmap)); return(1); + +malloc_failed: + if (priv->channels) + free(priv->channels); + if (priv->buf) + free(priv->buf); err: if (priv->fd != -1) close(priv->fd);