File 24000-bnc743031-revert-3202420-cdata-escape.patch of Package sblim-sfcb-sle11-sp2
diff --git a/cimXmlGen.c b/cimXmlGen.c
index afbe06f..3608876 100644
--- a/cimXmlGen.c
+++ b/cimXmlGen.c
@@ -64,14 +64,14 @@ char *XMLEscape(char *in, int *outlen)
{
int i, l, o, n;
char *out;
- char *rep, *end;
+ char *rep;
_SFCB_ENTER(TRACE_CIMXMLPROC, "XMLEscape");
if (in == NULL)
return (NULL);
l = strlen(in);
- out = (char *) malloc((l * 6) + 1);
+ out = (char *) malloc((l * 6) + 1); /* assume maximal escaping */
o = 0;
for (i = 0; i < l; i++) {
@@ -85,16 +85,25 @@ char *XMLEscape(char *in, int *outlen)
/* skip escaping if this is a CDATA section */
if ((in[i+1] == '!') && ((l-i) > 11)) { /* do minimum check, then check if enough chars to compare */
- rep = &in[i];
- if (!strncmp(rep, "<![CDATA[", 9)) { /* now look for the cdata start marker */
- if ((end = strstr(rep, "]]>"))) { /* valid cdata should have end marker */
- n = ((end-rep)+3);
+ fprintf(stderr, "Detected <!\n");
+ /* in == "<!...." */
+ if (!strncmp(in+i+2, "[CDATA[", 7)) { /* now look for the cdata start marker */
+ fprintf(stderr, "Detected <![CDATA[\n");
+ /* in == "<!CDATA...." */
+ if ((rep = strstr(in+i+9, "]]>"))) { /* valid cdata should have end marker */
+ fprintf(stderr, "Detected ]]>\n");
+ memcpy(out+o, "<", 4); /* escape leading left angle bracket */
+ n = (rep-(in+i+1)+2); /* copy CDATA section as-is, except trailing right angle bracket */
+ memcpy(out+4, in+i+1, n);
+ o += n + 4;
i += (n - 1);
break;
- } /* else, bad format */
+ }
+ else {
+ mlogf(M_ERROR,M_SHOW,"Invalid <![CDATA in string property value, missing ]]> end marker");
+ }
}
}
-
n = 4;
rep = "<";
break;