# HG changeset patch # User eugeni # Date 1247916783 0 # Node ID e9cab9f6ed627b3a2d7bada1ea3dc8435ea7f01a # Parent 363310571aae88750003a51d841c1510dc871a5b Make sure clip coordinates are inside the screen area. diff -r 363310571aae -r e9cab9f6ed62 libass/ass_render.c --- 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; diff -r 363310571aae -r e9cab9f6ed62 libmpcodecs/vf_ass.c --- 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];