]> gitweb.michael.orlitzky.com - libsvgtiny-pixbuf.git/commitdiff
io-svg.c: add a mutex around svgtiny_parse()
authorMichael Orlitzky <michael@orlitzky.com>
Mon, 7 Aug 2023 23:31:08 +0000 (19:31 -0400)
committerMichael Orlitzky <michael@orlitzky.com>
Mon, 7 Aug 2023 23:31:08 +0000 (19:31 -0400)
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

index 68f8b4dc4e7aa9e454256e1a6589c4628d530dc5..a588dccec688a624cdb8c99991b1bd8666cb7209 100644 (file)
--- 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: