diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2018-05-18 10:26:42 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2018-05-18 14:01:50 +0200 |
commit | 389ead8ebdc74fa5897aa0daec6c8f21390d30a4 (patch) | |
tree | 2ec9afdb5b5029fe183d5f4a13cd8b6ce87f6286 | |
parent | 5aa6e6bec6c5feaf291f1c31b93318903ca380c3 (diff) | |
download | mupdf-389ead8ebdc74fa5897aa0daec6c8f21390d30a4.tar.xz |
Fix segfault in SVG parser when encountering text data.
fz_xml_tag returns NULL for non-tag (i.e. text) elements.
Use the fz_xml_is_tag function instead of comparing strings.
-rw-r--r-- | source/svg/svg-run.c | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/source/svg/svg-run.c b/source/svg/svg-run.c index 8525db07..19e49836 100644 --- a/source/svg/svg-run.c +++ b/source/svg/svg-run.c @@ -1058,52 +1058,50 @@ svg_run_use(fz_context *ctx, fz_device *dev, svg_document *doc, fz_xml *root, co static void svg_run_element(fz_context *ctx, fz_device *dev, svg_document *doc, fz_xml *root, const svg_state *state) { - char *tag = fz_xml_tag(root); - - if (!strcmp(tag, "svg")) + if (fz_xml_is_tag(root, "svg")) svg_run_svg(ctx, dev, doc, root, state); - else if (!strcmp(tag, "g")) + else if (fz_xml_is_tag(root, "g")) svg_run_g(ctx, dev, doc, root, state); - else if (!strcmp(tag, "title")) + else if (fz_xml_is_tag(root, "title")) ; - else if (!strcmp(tag, "desc")) + else if (fz_xml_is_tag(root, "desc")) ; - else if (!strcmp(tag, "defs")) + else if (fz_xml_is_tag(root, "defs")) ; - else if (!strcmp(tag, "symbol")) + else if (fz_xml_is_tag(root, "symbol")) ; - else if (!strcmp(tag, "use")) + else if (fz_xml_is_tag(root, "use")) svg_run_use(ctx, dev, doc, root, state); - else if (!strcmp(tag, "path")) + else if (fz_xml_is_tag(root, "path")) svg_run_path(ctx, dev, doc, root, state); - else if (!strcmp(tag, "rect")) + else if (fz_xml_is_tag(root, "rect")) svg_run_rect(ctx, dev, doc, root, state); - else if (!strcmp(tag, "circle")) + else if (fz_xml_is_tag(root, "circle")) svg_run_circle(ctx, dev, doc, root, state); - else if (!strcmp(tag, "ellipse")) + else if (fz_xml_is_tag(root, "ellipse")) svg_run_ellipse(ctx, dev, doc, root, state); - else if (!strcmp(tag, "line")) + else if (fz_xml_is_tag(root, "line")) svg_run_line(ctx, dev, doc, root, state); - else if (!strcmp(tag, "polyline")) + else if (fz_xml_is_tag(root, "polyline")) svg_run_polyline(ctx, dev, doc, root, state); - else if (!strcmp(tag, "polygon")) + else if (fz_xml_is_tag(root, "polygon")) svg_run_polygon(ctx, dev, doc, root, state); #if 0 - else if (!strcmp(tag, "image")) + else if (fz_xml_is_tag(root, "image")) svg_parse_image(ctx, doc, root); - else if (!strcmp(tag, "text")) + else if (fz_xml_is_tag(root, "text")) svg_run_text(ctx, dev, doc, root); - else if (!strcmp(tag, "tspan")) + else if (fz_xml_is_tag(root, "tspan")) svg_run_text_span(ctx, dev, doc, root); - else if (!strcmp(tag, "tref")) + else if (fz_xml_is_tag(root, "tref")) svg_run_text_ref(ctx, dev, doc, root); - else if (!strcmp(tag, "textPath")) + else if (fz_xml_is_tag(root, "textPath")) svg_run_text_path(ctx, dev, doc, root); #endif |