Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
systemsmanagement:wbem
sblim-sfcb-sle11-sp2
24000-bnc743031-revert-3202420-cdata-escape.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor