summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames Courtier-Dutton <jcdutton@users.sourceforge.net>2001-11-30 16:19:58 +0000
committerJames Courtier-Dutton <jcdutton@users.sourceforge.net>2001-11-30 16:19:58 +0000
commit99d9a497fdce00a6ff4023fd0f92850feaa293cb (patch)
tree844726b0b151d15592a1498fe430d23667a82dc8 /src
parent4c98a93cafc9f5f45107eda78e4d6b19f8649f99 (diff)
downloadxine-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.c15
-rw-r--r--src/xine-engine/video_overlay.c16
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;