]> granicus.if.org Git - graphviz/commitdiff
Fix bug 2384
authorEmden R. Gansner <erg@alum.mit.edu>
Wed, 23 Oct 2013 20:42:56 +0000 (16:42 -0400)
committerEmden R. Gansner <erg@alum.mit.edu>
Wed, 23 Oct 2013 20:42:56 +0000 (16:42 -0400)
lib/common/labels.c
lib/common/utils.h
plugin/core/gvrender_core_svg.c
plugin/pango/gvtextlayout_pango.c

index a337ebb276b68cac2aa906c96fa912dd7656dc80..0bc38f2e573d709f0a6056225ea32449f9e07e36 100644 (file)
@@ -476,6 +476,17 @@ static int xml_isentity(char *s)
 }
 
 char *xml_string(char *s)
+{
+    return xml_string0 (s, FALSE);
+}
+
+/* xml_string0:
+ * Encode input string as an xml string.
+ * If raw is true, the input is interpreted as having no
+ * embedded escape sequences.
+ * Uses a static buffer, so non-re-entrant.
+ */
+char *xml_string0(char *s, boolean raw)
 {
     static char *buf = NULL;
     static int bufsize = 0;
@@ -495,7 +506,7 @@ char *xml_string(char *s)
            p = buf + pos;
        }
        /* escape '&' only if not part of a legal entity sequence */
-       if (*s == '&' && !(xml_isentity(s))) {
+       if (*s == '&' && (raw || !(xml_isentity(s)))) {
            sub = "&amp;";
            len = 5;
        }
index 771d4fd24ba083b2fd374689ff1ed04b8aff6678..2009018d9440740b4791c24618dd2d95177f2049 100644 (file)
@@ -48,6 +48,7 @@ extern "C" {
     extern void attach_attrs(graph_t * g);
     extern void attach_attrs_and_arrows(graph_t*, int*, int*);
     extern char *xml_string(char *str);
+    extern char *xml_string0(char *str, boolean raw);
     extern void write_plain(GVJ_t * job, graph_t * g, FILE * f, boolean extend);
     extern double yDir (double y);
     extern char *ps_string(char *s, int);
index aa08171a0c16341265967a1519cdb615ab616a30..429c2e9ad00f0b38800aa03f6ae556e805688818 100644 (file)
@@ -436,7 +436,7 @@ static void svg_textpara(GVJ_t * job, pointf p, textpara_t * para)
        assert(0);              /* internal error */
     }
     gvputs(job, ">");
-    gvputs(job, xml_string(para->str));
+    gvputs(job, xml_string0(para->str, TRUE));
     gvputs(job, "</text>\n");
 }
 
index 45a2d79ef7d091d2216947e1e3e021d56f13e659..f10c591660d313056ba00004ec3b2a02816145d9 100644 (file)
@@ -199,7 +199,7 @@ static boolean pango_textlayout(textpara_t * para, char **fontpath)
        if (flags & HTML_SUB)
            agxbput(&xb,"<sub>");
 
-       agxbput (&xb,xml_string(para->str));
+       agxbput (&xb,xml_string0(para->str, TRUE));
 
        if (flags & HTML_SUB)
            agxbput(&xb,"</sub>");