changeset 29383:e9cab9f6ed62

Make sure clip coordinates are inside the screen area.
author eugeni
date Sat, 18 Jul 2009 11:33:03 +0000
parents 363310571aae
children 36a9b369cd9d
files libass/ass_render.c libmpcodecs/vf_ass.c
diffstat 2 files changed, 15 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libass/ass_render.c	Sat Jul 18 11:33:00 2009 +0000
+++ b/libass/ass_render.c	Sat Jul 18 11:33:03 2009 +0000
@@ -317,6 +317,11 @@
 {
 	ass_image_t* img = calloc(1, sizeof(ass_image_t));
 
+	assert(dst_x >= 0);
+	assert(dst_y >= 0);
+	assert(dst_x + bitmap_w < frame_context.width);
+	assert(dst_y + bitmap_h < frame_context.height);
+
 	img->w = bitmap_w;
 	img->h = bitmap_h;
 	img->stride = stride;
@@ -598,6 +603,7 @@
 	return x*frame_context.orig_width / frame_context.track->PlayResX +
 		global_settings->left_margin;
 }
+
 /**
  * \brief Mapping between script and screen coordinates
  */
@@ -2148,6 +2154,11 @@
 		render_context.clip_y1 = y2scr_pos(render_context.clip_y1);
 	}
 
+	render_context.clip_x0 = FFMIN(FFMAX(render_context.clip_x0, 0), frame_context.width);
+	render_context.clip_x1 = FFMIN(FFMAX(render_context.clip_x1, 0), frame_context.width);
+	render_context.clip_y0 = FFMIN(FFMAX(render_context.clip_y0, 0), frame_context.height);
+	render_context.clip_y1 = FFMIN(FFMAX(render_context.clip_y1, 0), frame_context.height);
+
 	// calculate rotation parameters
 	{
 		FT_Vector center;
--- a/libmpcodecs/vf_ass.c	Sat Jul 18 11:33:00 2009 +0000
+++ b/libmpcodecs/vf_ass.c	Sat Jul 18 11:33:03 2009 +0000
@@ -219,6 +219,10 @@
 	last_row += (last_row % 2);
 	chroma_rows = (last_row - first_row) / 2;
 
+	assert(first_row >= 0);
+	assert(first_row <= last_row);
+	assert(last_row < vf->priv->outh);
+
 	for (pl = 1; pl < 3; ++pl) {
 		int dst_stride = vf->priv->outw;
 		int src_stride = vf->dmpi->stride[pl];