From 50058db27358e6e484a4679b7fae9d507c4d4c8e Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Sun, 23 May 2010 16:22:15 +0200 Subject: [PATCH] Escape all strings put into the Qt help XML files. --- sphinx/builders/qthelp.py | 43 ++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/sphinx/builders/qthelp.py b/sphinx/builders/qthelp.py index 082c32c3a..89bda0dcf 100644 --- a/sphinx/builders/qthelp.py +++ b/sphinx/builders/qthelp.py @@ -11,10 +11,10 @@ import os import re -import cgi import codecs import posixpath from os import path +from cgi import escape from docutils import nodes @@ -34,7 +34,7 @@ collection_template = u'''\ - %(project)s %(version)s + %(title)s %(homepage)s %(startpage)s @@ -154,8 +154,8 @@ class QtHelpBuilder(StandaloneHTMLBuilder): if (resourcedir and not fn.endswith('.js')) or \ fn.endswith('.html'): filename = path.join(root, fn)[olen:] - #filename = filename.replace(os.sep, '\\') # XXX - projectfiles.append(file_template % {'filename': filename}) + projectfiles.append(file_template % + {'filename': escape(filename)}) projectfiles = '\n'.join(projectfiles) # it seems that the "namespace" may not contain non-alphanumeric @@ -168,15 +168,16 @@ class QtHelpBuilder(StandaloneHTMLBuilder): # write the project file f = codecs.open(path.join(outdir, outname+'.qhp'), 'w', 'utf-8') try: - f.write(project_template % {'outname': outname, - 'title': self.config.html_title, - 'version': self.config.version, - 'project': self.config.project, - 'namespace': nspace, - 'masterdoc': self.config.master_doc, - 'sections': sections, - 'keywords': keywords, - 'files': projectfiles}) + f.write(project_template % { + 'outname': escape(outname), + 'title': escape(self.config.html_title), + 'version': escape(self.config.version), + 'project': escape(self.config.project), + 'namespace': escape(nspace), + 'masterdoc': escape(self.config.master_doc), + 'sections': sections, + 'keywords': keywords, + 'files': projectfiles}) finally: f.close() @@ -187,11 +188,11 @@ class QtHelpBuilder(StandaloneHTMLBuilder): self.info('writing collection project file...') f = codecs.open(path.join(outdir, outname+'.qhcp'), 'w', 'utf-8') try: - f.write(collection_template % {'outname': outname, - 'project': self.config.project, - 'version': self.config.version, - 'homepage': homepage, - 'startpage': startpage}) + f.write(collection_template % { + 'outname': escape(outname), + 'title': escape(self.config.html_short_title), + 'homepage': escape(homepage), + 'startpage': escape(startpage)}) finally: f.close() @@ -213,7 +214,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder): if self.isdocnode(node): refnode = node.children[0][0] link = refnode['refuri'] - title = cgi.escape(refnode.astext()).replace('"','"') + title = escape(refnode.astext()).replace('"','"') item = '
' % { 'title': title, 'ref': link} @@ -226,7 +227,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder): parts.extend(self.write_toc(subnode, indentlevel)) elif isinstance(node, nodes.reference): link = node['refuri'] - title = cgi.escape(node.astext()).replace('"','"') + title = escape(node.astext()).replace('"','"') item = section_template % {'title': title, 'ref': link} item = ' '*4*indentlevel + item.encode('ascii', 'xmlcharrefreplace') parts.append(item.encode('ascii', 'xmlcharrefreplace')) @@ -263,7 +264,7 @@ class QtHelpBuilder(StandaloneHTMLBuilder): def build_keywords(self, title, refs, subitems): keywords = [] - title = cgi.escape(title) + title = escape(title) # if len(refs) == 0: # XXX # write_param('See Also', title) if len(refs) == 1: