]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-7724: [mod_conference] fix segfault when missing fonts when trying to render banner
authorMichael Jerris <mike@jerris.com>
Wed, 24 Jun 2015 22:10:21 +0000 (17:10 -0500)
committerBrian West <brian@freeswitch.org>
Wed, 24 Jun 2015 22:10:24 +0000 (17:10 -0500)
src/mod/applications/mod_conference/mod_conference.c
src/switch_core_video.c

index e300588f5b0121a83946d80e9d650efe88fb6434..c906611485d000ff75adc16a4d4e53aa69969661 100644 (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)
index 7e3a931b2b7866ddb9ffee8425f415af5701f29a..d9336fd7dbd09767a781a51e4ca6daaa0a13ccef 100644 (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) {