Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
53c87d1b
Commit
53c87d1b
authored
Sep 04, 2014
by
Łukasz Langa
Browse files
Options
Browse Files
Download
Plain Diff
Merge fix for #19546: configparser exceptions leak implementation details
parents
ece38d94
949053bf
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
62 additions
and
6 deletions
+62
-6
Lib/configparser.py
Lib/configparser.py
+6
-6
Lib/test/test_configparser.py
Lib/test/test_configparser.py
+52
-0
Misc/NEWS
Misc/NEWS
+4
-0
No files found.
Lib/configparser.py
View file @
53c87d1b
...
...
@@ -410,7 +410,7 @@ class BasicInterpolation(Interpolation):
v
=
map
[
var
]
except
KeyError
:
raise
InterpolationMissingOptionError
(
option
,
section
,
rest
,
var
)
option
,
section
,
rest
,
var
)
from
None
if
"%"
in
v
:
self
.
_interpolate_some
(
parser
,
option
,
accum
,
v
,
section
,
map
,
depth
+
1
)
...
...
@@ -482,7 +482,7 @@ class ExtendedInterpolation(Interpolation):
"
More
than
one
':'
found
:
%
r" % (rest,))
except (KeyError, NoSectionError, NoOptionError):
raise InterpolationMissingOptionError(
option, section, rest, "
:
".join(path))
option, section, rest, "
:
".join(path))
from None
if "
$
" in v:
self._interpolate_some(parser, opt, accum, v, sect,
dict(parser.items(sect, raw=True)),
...
...
@@ -515,7 +515,7 @@ class LegacyInterpolation(Interpolation):
value = value % vars
except KeyError as e:
raise InterpolationMissingOptionError(
option, section, rawval, e.args[0])
option, section, rawval, e.args[0])
from None
else:
break
if value and "
%
(
" in value:
...
...
@@ -647,7 +647,7 @@ class RawConfigParser(MutableMapping):
try:
opts = self._sections[section].copy()
except KeyError:
raise NoSectionError(section)
raise NoSectionError(section)
from None
opts.update(self._defaults)
return list(opts.keys())
...
...
@@ -876,7 +876,7 @@ class RawConfigParser(MutableMapping):
try:
sectdict = self._sections[section]
except KeyError:
raise NoSectionError(section)
raise NoSectionError(section)
from None
sectdict[self.optionxform(option)] = value
def write(self, fp, space_around_delimiters=True):
...
...
@@ -917,7 +917,7 @@ class RawConfigParser(MutableMapping):
try:
sectdict = self._sections[section]
except KeyError:
raise NoSectionError(section)
raise NoSectionError(section)
from None
option = self.optionxform(option)
existed = option in sectdict
if existed:
...
...
Lib/test/test_configparser.py
View file @
53c87d1b
...
...
@@ -1763,6 +1763,58 @@ class InlineCommentStrippingTestCase(unittest.TestCase):
self
.
assertEqual
(
s
[
'k2'
],
'v2'
)
self
.
assertEqual
(
s
[
'k3'
],
'v3;#//still v3# and still v3'
)
class
ExceptionContextTestCase
(
unittest
.
TestCase
):
""" Test that implementation details doesn't leak
through raising exceptions. """
def
test_get_basic_interpolation
(
self
):
parser
=
configparser
.
ConfigParser
()
parser
.
read_string
(
"""
[Paths]
home_dir: /Users
my_dir: %(home_dir1)s/lumberjack
my_pictures: %(my_dir)s/Pictures
"""
)
cm
=
self
.
assertRaises
(
configparser
.
InterpolationMissingOptionError
)
with
cm
:
parser
.
get
(
'Paths'
,
'my_dir'
)
self
.
assertIs
(
cm
.
exception
.
__suppress_context__
,
True
)
def
test_get_extended_interpolation
(
self
):
parser
=
configparser
.
ConfigParser
(
interpolation
=
configparser
.
ExtendedInterpolation
())
parser
.
read_string
(
"""
[Paths]
home_dir: /Users
my_dir: ${home_dir1}/lumberjack
my_pictures: ${my_dir}/Pictures
"""
)
cm
=
self
.
assertRaises
(
configparser
.
InterpolationMissingOptionError
)
with
cm
:
parser
.
get
(
'Paths'
,
'my_dir'
)
self
.
assertIs
(
cm
.
exception
.
__suppress_context__
,
True
)
def
test_missing_options
(
self
):
parser
=
configparser
.
ConfigParser
()
parser
.
read_string
(
"""
[Paths]
home_dir: /Users
"""
)
with
self
.
assertRaises
(
configparser
.
NoSectionError
)
as
cm
:
parser
.
options
(
'test'
)
self
.
assertIs
(
cm
.
exception
.
__suppress_context__
,
True
)
def
test_missing_section
(
self
):
config
=
configparser
.
ConfigParser
()
with
self
.
assertRaises
(
configparser
.
NoSectionError
)
as
cm
:
config
.
set
(
'Section1'
,
'an_int'
,
'15'
)
self
.
assertIs
(
cm
.
exception
.
__suppress_context__
,
True
)
def
test_remove_option
(
self
):
config
=
configparser
.
ConfigParser
()
with
self
.
assertRaises
(
configparser
.
NoSectionError
)
as
cm
:
config
.
remove_option
(
'Section1'
,
'an_int'
)
self
.
assertIs
(
cm
.
exception
.
__suppress_context__
,
True
)
if
__name__
==
'__main__'
:
unittest
.
main
()
Misc/NEWS
View file @
53c87d1b
...
...
@@ -129,6 +129,10 @@ Core and Builtins
Library
-------
-
Issue
#
19546
:
configparser
exceptions
no
longer
expose
implementation
details
.
Chained
KeyErrors
are
removed
,
which
leads
to
cleaner
tracebacks
.
Patch
by
Claudiu
Popa
.
-
Issue
#
22051
:
turtledemo
no
longer
reloads
examples
to
re
-
run
them
.
Initialization
of
variables
and
gui
setup
should
be
done
in
main
(),
which
is
called
each
time
a
demo
is
run
,
but
not
on
import
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment