diff options
author | James Courtier-Dutton <jcdutton@users.sourceforge.net> | 2001-11-30 16:19:58 +0000 |
---|---|---|
committer | James Courtier-Dutton <jcdutton@users.sourceforge.net> | 2001-11-30 16:19:58 +0000 |
commit | 99d9a497fdce00a6ff4023fd0f92850feaa293cb (patch) | |
tree | 844726b0b151d15592a1498fe430d23667a82dc8 /src | |
parent | 4c98a93cafc9f5f45107eda78e4d6b19f8649f99 (diff) | |
download | xine-lib-99d9a497fdce00a6ff4023fd0f92850feaa293cb.tar.gz xine-lib-99d9a497fdce00a6ff4023fd0f92850feaa293cb.tar.bz2 |
Fix a seg fault in hide_menu event.
CVS patchset: 1143
CVS date: 2001/11/30 16:19:58
Diffstat (limited to 'src')
-rw-r--r-- | src/libspudec/xine_decoder.c | 15 | ||||
-rw-r--r-- | src/xine-engine/video_overlay.c | 16 |
2 files changed, 23 insertions, 8 deletions
diff --git a/src/libspudec/xine_decoder.c b/src/libspudec/xine_decoder.c index 39c4726cf..8bd4919cc 100644 --- a/src/libspudec/xine_decoder.c +++ b/src/libspudec/xine_decoder.c @@ -19,7 +19,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xine_decoder.c,v 1.38 2001/11/30 15:39:55 jcdutton Exp $ + * $Id: xine_decoder.c,v 1.39 2001/11/30 16:19:58 jcdutton Exp $ * * stuff needed to turn libspu into a xine decoder plugin */ @@ -350,27 +350,34 @@ static void spudec_event_listener(void *this_gen, xine_event_t *event_gen) { video_overlay_event_t *overlay_event = NULL; vo_overlay_t *overlay = NULL; spu_button_t *but = event->data; + #ifdef LOG_DEBUG printf ("MALLOC1: overlay_event %p, len=%d\n", overlay_event, sizeof(video_overlay_event_t)); #endif + overlay_event = xine_xmalloc (sizeof(video_overlay_event_t)); + #ifdef LOG_DEBUG printf("MALLOC2: overlay_event %p, len=%d\n", overlay_event, sizeof(video_overlay_event_t)); +#endif + +#ifdef LOG_DEBUG printf ("MALLOC1: overlay %p, len=%d\n", overlay, sizeof(vo_overlay_t)); #endif + overlay = xine_xmalloc (sizeof(vo_overlay_t)); + #ifdef LOG_DEBUG printf ("MALLOC2: overlay %p, len=%d\n", overlay, sizeof(vo_overlay_t)); #endif - overlay_event->object.overlay=overlay; #ifdef LOG_DEBUG printf ("BUTTON\n"); @@ -383,6 +390,10 @@ static void spudec_event_listener(void *this_gen, xine_event_t *event_gen) { but->left, but->right, but->top, but->bottom ); #endif if (!this->state.menu) return; + +#ifdef LOG_DEBUG + printf ("libspudec:xine_decoder.c:spudec_event_listener:this->menu_handle=%u\n",this->menu_handle); +#endif if (but->show) { overlay_event->object.handle = this->menu_handle; diff --git a/src/xine-engine/video_overlay.c b/src/xine-engine/video_overlay.c index a095b8e4b..3e497aced 100644 --- a/src/xine-engine/video_overlay.c +++ b/src/xine-engine/video_overlay.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: video_overlay.c,v 1.2 2001/11/29 16:31:47 miguelfreitas Exp $ + * $Id: video_overlay.c,v 1.3 2001/11/30 16:19:58 jcdutton Exp $ * */ @@ -281,13 +281,17 @@ static int32_t video_overlay_add_event(video_overlay_instance_t *this_gen, void fprintf(stderr,"video_overlay: error: event->object.overlay was not freed!\n"); } - this->video_overlay_events[new_event].event->object.overlay = xine_xmalloc (sizeof(vo_overlay_t)); - memcpy(this->video_overlay_events[new_event].event->object.overlay, + if( event->object.overlay ) { + this->video_overlay_events[new_event].event->object.overlay = xine_xmalloc (sizeof(vo_overlay_t)); + xine_fast_memcpy(this->video_overlay_events[new_event].event->object.overlay, event->object.overlay, sizeof(vo_overlay_t)); - /* We took the callers rle and data, therefore it will be our job to free it */ - /* clear callers overlay so it will not be freed twice */ - memset(event->object.overlay,0,sizeof(vo_overlay_t)); + /* We took the callers rle and data, therefore it will be our job to free it */ + /* clear callers overlay so it will not be freed twice */ + memset(event->object.overlay,0,sizeof(vo_overlay_t)); + } else { + this->video_overlay_events[new_event].event->object.overlay = NULL; + } } else { fprintf(stderr, "No spare subtitle event slots\n"); new_event = -1; |