Public bug reported:
According to the function Cimom::unescapeXml() in CimXml.cpp, in addition to
escaping the quote character, it should also escape the backslash character.
Without escaping backslash, if the string is ended with backslash,
the quoted text output will be ambiguous. The backslash at the end
will be attached to the closing quote, and be interpreted as an escaped
quote character.
According to,
xml: a" --> text output: "a\"" --> interpreted as: a"
then the following will be ambiguous,
xml: a\ --> text output: "a\" --> interpreted as: a" (with trailing garbage
characters)
The function then should be fixed like this, (converting "&xxx;" should also be
case-insensitive)
string Cimom::unescapeXml(const char *m, int nq)
{
- #define REPL(str,chrs) if(strncmp(p,str,strlen(str))==0) \
+ #define REPL(str,chrs) if(strncasecmp(p,str,strlen(str))==0) \
{ strcpy (q,(chrs)); \
q+=strlen(chrs); \
p+=strlen(str); }
const char *quotereplace = nq ? "\\\"" : "\"";
+ const char *backslashreplace = nq ? "\\\\" : "\\";
const char *p;
char *q, *buf = (char *) alloca(strlen(m));
for(p=m,q=buf; *p;)
+ // Without escaping backslash, if the string is ended with backslash,
+ // the quoted text output will be ambiguous. The backslash at the end
+ // will be attached to the closing quote, and be interpreted as an escaped
+ // quote character, like this,
+ // * xml: a\ --> text output: "a\" --> incorrectly interpreted as: a"
+ // * xml: a" --> text output: "a\"" --> correctly interpreted as: a"
+ REPL("\\",backslashreplace) else // xml: a\ --> output: "a\\"
if(*p!='&') { *q++ = *p++; }
else {
REPL(">",">")
** Affects: sblim-wbemcli (Ubuntu)
Importance: Undecided
Status: New
--
should escape backslash character in CimXml::unescapeXml()
https://bugs.launchpad.net/bugs/384721
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs