From 82d44de402b3ac5fd468e559d3fdf1c2d08e1932 Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Mon, 7 Aug 2023 19:31:08 -0400 Subject: [PATCH] io-svg.c: add a mutex around svgtiny_parse() This works around (what appears to be) a thread-safety issue in libwapcaplet: https://bugs.netsurf-browser.org/mantis/view.php?id=2857 --- io-svg.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/io-svg.c b/io-svg.c index 68f8b4d..a588dcc 100644 --- a/io-svg.c +++ b/io-svg.c @@ -134,11 +134,23 @@ static diagram_t* svgtiny_diagram_from_buffer(const gchar* buffer, g_assert((int)width >= 0); g_assert((int)height >= 0); + + /* There's a thread-safety issue in libwapcaplet that can cause + * svgtiny_parse() to crash if you load lots of SVGs at once: + * + * https://bugs.netsurf-browser.org/mantis/view.php?id=2857 + * + * Putting a lock around svgtiny_parse() is a pretty simple solution + * and looks like it does the trick. + */ + static GMutex mutex; + g_mutex_lock(&mutex); code = svgtiny_parse(diagram, - buffer, - bytecount, "", - (int)width, - (int)height); + buffer, + bytecount, "", + (int)width, + (int)height); + g_mutex_unlock (&mutex); switch(code) { case svgtiny_OK: -- 2.44.2