diff options
author | albert-github <albert.tests@gmail.com> | 2019-01-06 11:31:51 (GMT) |
---|---|---|
committer | albert-github <albert.tests@gmail.com> | 2019-01-06 11:31:51 (GMT) |
commit | a53d5b44731b55197d7ff2ae046552374d011e59 (patch) | |
tree | a1ae128f2c331230f7be24db5704a8f3cb46fe85 /src/util.cpp | |
parent | de34e6c26eeb0dca1b1a6aa8bf26d21bb3fd644f (diff) | |
download | Doxygen-a53d5b44731b55197d7ff2ae046552374d011e59.zip Doxygen-a53d5b44731b55197d7ff2ae046552374d011e59.tar.gz Doxygen-a53d5b44731b55197d7ff2ae046552374d011e59.tar.bz2 |
issue #6744 Ampersand in Markdown image URL is not escaped in XML output
Convert name / url based on HTML / XML conventions and don't do double conversions (XML).
Diffstat (limited to 'src/util.cpp')
-rw-r--r-- | src/util.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/util.cpp b/src/util.cpp index 24e8898..f9c2492 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -5914,7 +5914,7 @@ QCString convertToId(const char *s) } /*! Converts a string to an XML-encoded string */ -QCString convertToXML(const char *s) +QCString convertToXML(const char *s, bool keepEntities) { static GrowBuf growBuf; growBuf.clear(); @@ -5927,7 +5927,30 @@ QCString convertToXML(const char *s) { case '<': growBuf.addStr("<"); break; case '>': growBuf.addStr(">"); break; - case '&': growBuf.addStr("&"); break; + case '&': if (keepEntities) + { + const char *e=p; + char ce; + while ((ce=*e++)) + { + if (ce==';' || (!(isId(ce) || ce=='#'))) break; + } + if (ce==';') // found end of an entity + { + // copy entry verbatim + growBuf.addChar(c); + while (p<e) growBuf.addChar(*p++); + } + else + { + growBuf.addStr("&"); + } + } + else + { + growBuf.addStr("&"); + } + break; case '\'': growBuf.addStr("'"); break; case '"': growBuf.addStr("""); break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: |