summaryrefslogtreecommitdiff
path: root/source/svg
diff options
context:
space:
mode:
authorTor Andersson <tor.andersson@artifex.com>2018-05-18 10:26:42 +0200
committerTor Andersson <tor.andersson@artifex.com>2018-05-18 14:01:50 +0200
commit389ead8ebdc74fa5897aa0daec6c8f21390d30a4 (patch)
tree2ec9afdb5b5029fe183d5f4a13cd8b6ce87f6286 /source/svg
parent5aa6e6bec6c5feaf291f1c31b93318903ca380c3 (diff)
downloadmupdf-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.
Diffstat (limited to 'source/svg')
-rw-r--r--source/svg/svg-run.c40
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