Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 931492 - media-video/vlc: crash when using SVG without fontconfig
Summary: media-video/vlc: crash when using SVG without fontconfig
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: AMD64 Linux
: Normal normal (vote)
Assignee: Gentoo Media-video project
Depends on:
Reported: 2024-05-07 13:04 UTC by Emanuel Komínek
Modified: 2024-05-08 18:02 UTC (History)
1 user (show)

See Also:
Package list:
Runtime testing required: ---


Note You need to log in before you can comment on or make changes to this bug.
Description Emanuel Komínek 2024-05-07 13:04:26 UTC
When VLC is build with following options "-fontconfig svg", it crashes when displaying formatted subtitle line (in my case, it was italic text in SRT subtitles in form <i>blah blah</i>).

It fails in not very friendly way:
segfault at 0 ip 00007fa55e0c8272 sp 00007fa50fffd510 error 4 in

With debug flag, it asserts in text/string.c#195

I don't know it it's fixable in upstream but I'd at least place "fontconfig" as default USE flag, or make svg dependent on it.
Comment 1 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2024-05-07 23:03:29 UTC
Can you grab a backtrace please (
Comment 2 Emanuel Komínek 2024-05-08 11:31:34 UTC
>* thread #33, name = 'av:hevc:df0', stop reason = signal SIGABRT
>    frame #0: 0x00007ffff7e2fe9c`___lldb_unnamed_symbol3617 + 268
>    frame #1: 0x00007ffff7dde886`raise + 22
>    frame #2: 0x00007ffff7dc68b7`abort + 215
>    frame #3: 0x00007ffff7dc67db`___lldb_unnamed_symbol3097 + 15
>    frame #4: 0x00007ffff7dd6e96`__assert_fail + 70
>    frame #5: 0x00007ffff7cd2ea7`vlc_xml_encode(str=0x0000000000000000) at strings.c:296:5
>  * frame #6: 0x00007fffcd6df4a6`SegmentsToSVG(p_segment=0x00007fff87100280, i_height=46, pi_total_size=0x00007fffcd2b25cc) at svg.c:317:29
>    frame #7: 0x00007fffcd6df705`RenderText(p_filter=0x00007fffa00e2e90, p_region_out=0x00007fff8c49b150, p_region_in=0x00007fff8c49b150, p_chroma_list=0x00007fffcd1ab5c8) at svg.c:373:19
>    frame #8: 0x00007ffff7cbd245`SpuRenderText(spu=0x00007fffa00e2180, rerender_text=0x00007fffcd2b26e3, region=0x00007fff8c49b150, chroma_list=0x00007fffcd1ab5c8, elapsed_time=0) at vout_subpictures.c:282:9
>    frame #9: 0x00007ffff7cbe585`SpuRenderRegion(spu=0x00007fffa00e2180, dst_ptr=0x00007fff8c418ac0, dst_area=0x00007fffcd2b2dc0, subpic=0x00007fff50000c60, region=0x00007fff8c49b150, scale_size=(w = 10000, h = 10000), chroma_list=0x00007fffcd1ab5c8, fmt=0x00007fffcd2b3d40, subtitle_area=0x00007fffcd2b2e90, subtitle_area_count=0, render_date=14354826212) at vout_subpictures.c:690:9
>    frame #10: 0x00007ffff7cbff15`SpuRenderSubpictures(spu=0x00007fffa00e2180, i_subpicture=2, pp_subpicture=0x00007fffcd2b38b0, chroma_list=0x00007fffcd1ab5c8, fmt_dst=0x00007fffcd2b3d40, fmt_src=0x00007fff8c0013f8, render_subtitle_date=14354826212, render_osd_date=14354735833) at vout_subpictures.c:1117:13
>    frame #11: 0x00007ffff7cc126a`spu_Render(spu=0x00007fffa00e2180, chroma_list=0x00007fffcd1ab5c8, fmt_dst=0x00007fffcd2b3d40, fmt_src=0x00007fff8c0013f8, render_subtitle_date=14354826212, render_osd_date=14354735833, ignore_osd=false) at vout_subpictures.c:1610:28
>    frame #12: 0x00007ffff7cb6fe0`ThreadDisplayRenderPicture(vout=0x00007fffa00df610, is_forced=false) at video_output.c:1057:28
>    frame #13: 0x00007ffff7cb7859`ThreadDisplayPicture(vout=0x00007fffa00df610, deadline=0x00007fffcd2b3e90) at video_output.c:1250:15
>    frame #14: 0x00007ffff7cb90a6`Thread(object=0x00007fffa00df610) at video_output.c:1813:16
>    frame #15: 0x00007ffff7e2e101`___lldb_unnamed_symbol3614 + 705
>    frame #16: 0x00007ffff7ea325c`___lldb_unnamed_symbol4008 + 7* thread #33, name = 'av:hevc:df0', stop reason = signal SIGABRT

I have following subtitle line:
> <i>and little families from Iowa</i>

It is parsed to following three segments:
> ""
> "and little families from Iowa"
> nullptr

As expected, VLC crashes on the third one.

Interestingly enough, the code in RenderText checks for "<svg" in the first segment, so I'd be expecting to see "<i>" there. So the question is whether the bug is in SVG renderer or subtitles parsing is incorrect.

It may be that using fontconfig, this issue is just hidden (I didn't check).
Comment 3 Emanuel Komínek 2024-05-08 18:02:46 UTC
Further debugging led me to ParseSubtitles() function which splits subtitle lines to segments. It seems it's quite normal not to set psz_text (except for first segment) for formatting tags. It's in line with the behavior I observe in crash callstack.

With that information, it just seems that SVG text renderer isn't mature enough in upstream and I can hardly recommend it.

I have come up with a patch that fixes the issue but I still believe that most people should compile VLC with fontconfig and that's still my proposal.

The patch probably belongs to upstream and formatting is ignored (AFAIK it's not implemented in SVG renderer): 
> --- a/modules/text_renderer/svg.c 2023-02-11 10:33:18.000000000 +0100
> +++ b/modules/text_renderer/svg.c 2024-05-08 19:46:10.187641898 +0200
> @@ -314,7 +314,7 @@
>      for( ; p_segment; p_segment = p_segment->p_next )
>      {
>          char *psz_prev = psz_result;
> -        char *psz_encoded = vlc_xml_encode( p_segment->psz_text );
> +        char *psz_encoded = vlc_xml_encode( p_segment->psz_text ? > p_segment->psz_text : "");
>          if( asprintf( &psz_result, "%s<tspan x='0' dy='%upx'>%s</tspan>\n",
>                                     (psz_prev) ? psz_prev : "",
>                                      i_height,