SvgLoader: Defs type nodes are not saved in loader's node list.
authorJunsuChoi <jsuya.choi@samsung.com>
Wed, 2 Sep 2020 09:34:59 +0000 (18:34 +0900)
committerJongmin Lee <jm105.lee@samsung.com>
Wed, 2 Sep 2020 22:03:41 +0000 (07:03 +0900)
Summary:
If there is an empty (unused) <defs /> inside the svg file, this can cause problems.
<defs> node is managed separately in loader->def.
So it doesn't have to be added to loader's list.

Test Plan: N/A

Reviewers: Hermet, smohanty

Reviewed By: Hermet

Subscribers: cedric, #reviewers, #committers, kimcinoo, herb

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D12127

src/modules/evas/vg_loaders/svg/evas_vg_load_svg.c

index cefdc33..38d6d50 100644 (file)
@@ -2160,17 +2160,23 @@ _evas_svg_loader_xml_open_parser(Evas_SVG_Loader *loader,
              parent = eina_array_data_get(loader->stack, eina_array_count(loader->stack) - 1);
              node = method(loader, parent, attrs, attrs_length);
           }
-        eina_array_push(loader->stack, node);
 
         if (node->type == SVG_NODE_DEFS)
-        {
-          loader->doc->node.doc.defs = node;
-          loader->def = node;
-        }
+          {
+             loader->doc->node.doc.defs = node;
+             loader->def = node;
+          }
+        else
+          {
+             eina_array_push(loader->stack, node);
+          }
      }
    else if ((method = _find_graphics_factory(tag_name)))
      {
-        parent = eina_array_data_get(loader->stack, eina_array_count(loader->stack) - 1);
+        if (eina_array_count(loader->stack) > 0)
+          parent = eina_array_data_get(loader->stack, eina_array_count(loader->stack) - 1);
+        else
+          parent = loader->doc;
         node = method(loader, parent, attrs, attrs_length);
      }
    else if ((gradient_method = _find_gradient_factory(tag_name)))