|
From: Tyrel D. <ty...@us...> - 2012-06-27 00:22:02
|
Update of /cvsroot/sblim/wbemcli
In directory vz-cvs-3.sog:/tmp/cvs-serv11947
Modified Files:
CimXml.cpp NEWS
Log Message:
Fixed 3495602: Fix for ID 3202420 (CDATA escape) breaks cim clients (patch by
Klaus Kämpf)
Index: NEWS
===================================================================
RCS file: /cvsroot/sblim/wbemcli/NEWS,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- NEWS 18 Apr 2012 04:52:16 -0000 1.43
+++ NEWS 27 Jun 2012 00:22:00 -0000 1.44
@@ -1,9 +1,15 @@
-Changes in Version 1.6.2
+Changes in Version 1.6.3
========================
Bugs:
- 3519016 wbemcli does not support EmbeddedObject attr of PARAMVALUE
- 3514126 wbemcli does not compile with GCC 4.7
+- 3495602 Fix for ID 3202420 (CDATA escape) breaks cim clients
+
+Changes in Version 1.6.2
+========================
+
+Bugs:
- 3324380 support optional CIMType in KEYVALUE element
- 3216622 wbemcli throws parser error on CDATA string value
- 2991546 Core dumps when property contains value within "[]"
Index: CimXml.cpp
===================================================================
RCS file: /cvsroot/sblim/wbemcli/CimXml.cpp,v
retrieving revision 1.72
retrieving revision 1.73
diff -u -d -r1.72 -r1.73
--- CimXml.cpp 18 Apr 2012 04:52:16 -0000 1.72
+++ CimXml.cpp 27 Jun 2012 00:22:00 -0000 1.73
@@ -328,7 +328,19 @@
#endif
char *start=cur;
if (a && a->eTagFound) return NULL;
- for (; *cur!='<' && cur<last; cur++);
+ for (; cur<last; cur++) {
+ if (*cur == '<') {
+ if (!strncmp(cur, "<![CDATA[", 9)) {
+ cur += 9;
+ char *end = strstr(cur, "]]>");
+ if (end == NULL)
+ throw ParseException("Failed to get CDATA end tag.");
+ cur = end + 2; /* loop increments cur once more */
+ }
+ else
+ break;
+ }
+ }
if (start==cur) return "";
memmove(start-2,start,cur-start);
*(cur-2)=0;
@@ -2753,25 +2765,7 @@
}
}
- else {
- if (!strncmp(xb.cur, "<![CDATA[", 8)) {
- char *start = xb.cur;
- char *end = strstr(start, "]]>");
- char *cdataval;
-
- if (end == NULL)
- throw ParseException("Failed to get CDATA end tag.");
-
- start += 9; // skip CDATA begin tag
- end--; // skip CDATA end tag
- cdataval = strndup(start, ((end - start) + 1));
- val=string(cdataval);
- free(cdataval);
- xb.cur = (end + 4); // move current pointer past CDATA section
- } else {
- val=string(xb.getContent(&attr));
- }
- }
+ else val=string(xb.getContent(&attr));
tag=xb.nextTag();
if (xb.nextEquals(tag,"/VALUE")) {
|