FS-7724: [mod_conference] fix segfault when missing fonts when trying to render banner

This commit is contained in:
Michael Jerris 2015-06-24 17:10:21 -05:00 committed by Brian West
parent d5c6443b23
commit f727cdb9d1
2 changed files with 19 additions and 9 deletions

View File

@ -1350,7 +1350,6 @@ static void layer_set_banner(conference_member_t *member, mcu_layer_t *layer, co
text = tmp + 1;
}
if (params) {
if ((var = switch_event_get_header(params, "fg"))) {
fg = var;
@ -1379,28 +1378,37 @@ static void layer_set_banner(conference_member_t *member, mcu_layer_t *layer, co
switch_color_set_rgb(&fgcolor, fg);
switch_color_set_rgb(&bgcolor, bg);
switch_img_free(&layer->banner_img);
switch_img_free(&layer->logo_img);
switch_img_free(&layer->logo_text_img);
layer->banner_img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, layer->screen_w, font_size * 2, 1);
if (layer->txthandle) {
switch_img_txt_handle_destroy(&layer->txthandle);
}
switch_img_txt_handle_create(&layer->txthandle, font_face, fg, bg, font_size, 0, NULL);
if (!layer->txthandle) {
switch_img_free(&layer->banner_img);
layer->banner_patched = 0;
switch_img_fill(member->conference->canvas->img, layer->x_pos, layer->y_pos, layer->screen_w, layer->screen_h,
&member->conference->canvas->letterbox_bgcolor);
goto end;
}
switch_img_free(&layer->banner_img);
switch_img_free(&layer->logo_img);
switch_img_free(&layer->logo_text_img);
layer->banner_img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, layer->screen_w, font_size * 2, 1);
reset_image(layer->banner_img, &bgcolor);
switch_img_txt_handle_render(layer->txthandle, layer->banner_img, font_size / 2, font_size / 2, text, NULL, fg, bg, 0, 0);
end:
if (params) switch_event_destroy(&params);
switch_safe_free(dup);
end:
switch_mutex_unlock(member->conference->canvas->mutex);
}
static void reset_video_bitrate_counters(conference_member_t *member)

View File

@ -883,6 +883,8 @@ SWITCH_DECLARE(uint32_t) switch_img_txt_handle_render(switch_img_txt_handle_t *h
if (zstr(text)) return 0;
if (!handle) return 0;
switch_assert(!img || img->fmt == SWITCH_IMG_FMT_I420 || img->fmt == SWITCH_IMG_FMT_ARGB);
if (font_family) {