Closes #933: Do not crash if an `:option:` value is malformed (contains spaces

but no option name).
This commit is contained in:
Georg Brandl 2014-01-10 22:04:03 +01:00
parent 38d73fb056
commit 195050c6c4
4 changed files with 19 additions and 4 deletions

View File

@ -30,6 +30,9 @@ Bugs fixed
* #932: autodoc: Do not crash if ``__doc__`` is not a string.
* #933: Do not crash if an ``:option:`` value is malformed (contains spaces
but no option name).
Documentation
-------------

View File

@ -190,17 +190,26 @@ class Program(Directive):
class OptionXRefRole(XRefRole):
innernodeclass = addnodes.literal_emphasis
def _split(self, text, refnode, env):
try:
program, target = re.split(' (?=-|--|/)', text, 1)
except ValueError:
env.warn_node('Malformed :option: %r, does not contain option '
'marker - or -- or /' % text, refnode)
return None, text
else:
program = ws_re.sub('-', program)
return program, target
def process_link(self, env, refnode, has_explicit_title, title, target):
program = env.temp_data.get('std:program')
if not has_explicit_title:
if ' ' in title and not (title.startswith('/') or
title.startswith('-')):
program, target = re.split(' (?=-|--|/)', title, 1)
program = ws_re.sub('-', program)
program, target = self._split(title, refnode, env)
target = target.strip()
elif ' ' in target:
program, target = re.split(' (?=-|--|/)', target, 1)
program = ws_re.sub('-', program)
program, target = self._split(target, refnode, env)
refnode['refprogram'] = program
return title, target

View File

@ -139,6 +139,7 @@ Adding \n to test unescaping.
* :doc:`subdir/includes`
* ``:download:`` is tested in includes.txt
* :option:`Python -c option <python -c>`
* This used to crash: :option:`Python c option`
Test :abbr:`abbr (abbreviation)` and another :abbr:`abbr (abbreviation)`.

View File

@ -42,6 +42,8 @@ http://www.python.org/logo.png
reading included file u'.*?wrongenc.inc' seems to be wrong, try giving an \
:encoding: option\\n?
%(root)s/includes.txt:4: WARNING: download file not readable: .*?nonexisting.png
%(root)s/markup.txt:142: WARNING: Malformed :option: u'Python c option', does \
not contain option marker - or -- or /
%(root)s/objects.txt:\\d*: WARNING: using old C markup; please migrate to \
new-style markup \(e.g. c:function instead of cfunction\), see \
http://sphinx-doc.org/domains.html