Fix #2475 ini_file module: bracklets in key break idempotence

Escape the regex special characters in the option name.
pull/18777/head
Ales Nosek 9 years ago committed by Matt Clay
parent 42d0ce8744
commit df4109d946

@ -98,6 +98,22 @@ import ConfigParser
import sys
import os
# ==============================================================
# match_opt
def match_opt(option, line):
option = re.escape(option)
return re.match('%s *=' % option, line) \
or re.match('# *%s *=' % option, line) \
or re.match('; *%s *=' % option, line)
# ==============================================================
# match_active_opt
def match_active_opt(option, line):
option = re.escape(option)
return re.match('%s *=' % option, line)
# ==============================================================
# do_ini
@ -140,9 +156,7 @@ def do_ini(module, filename, section=None, option=None, value=None, state='prese
if within_section and option:
if state == 'present':
# change the existing option line
if re.match('%s *=' % option, line) \
or re.match('# *%s *=' % option, line) \
or re.match('; *%s *=' % option, line):
if match_opt(option, line):
newline = '%s = %s\n' % (option, value)
changed = ini_lines[index] != newline
ini_lines[index] = newline
@ -153,14 +167,14 @@ def do_ini(module, filename, section=None, option=None, value=None, state='prese
line = ini_lines[index]
if line.startswith('['):
break
if re.match('%s *=' % option, line):
if match_active_opt(option, line):
del ini_lines[index]
else:
index = index + 1
break
else:
# comment out the existing option line
if re.match('%s *=' % option, line):
if match_active_opt(option, line):
ini_lines[index] = '#%s' % ini_lines[index]
changed = True
break

Loading…
Cancel
Save