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, "&lt;", 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 = "&lt;";
 	break;
openSUSE Build Service is sponsored by