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
33363f43
Commit
33363f43
authored
Nov 07, 2012
by
Hynek Schlawack
Browse files
Options
Browse Files
Download
Plain Diff
Issue #15001: fix segfault on "del sys.module['__main__']"
Patch by Victor Stinner.
parents
c3fb3c3f
5c6b3e21
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
21 additions
and
6 deletions
+21
-6
Lib/test/test_cmd_line.py
Lib/test/test_cmd_line.py
+12
-0
Misc/NEWS
Misc/NEWS
+3
-0
Python/pythonrun.c
Python/pythonrun.c
+6
-6
No files found.
Lib/test/test_cmd_line.py
View file @
33363f43
...
...
@@ -358,6 +358,18 @@ class CmdLineTest(unittest.TestCase):
self
.
assertEqual
(
rc
,
0
)
self
.
assertIn
(
b'random is 1'
,
out
)
def
test_del___main__
(
self
):
# Issue #15001: PyRun_SimpleFileExFlags() did crash because it kept a
# borrowed reference to the dict of __main__ module and later modify
# the dict whereas the module was destroyed
filename
=
test
.
support
.
TESTFN
self
.
addCleanup
(
test
.
support
.
unlink
,
filename
)
with
open
(
filename
,
"w"
)
as
script
:
print
(
"import sys"
,
file
=
script
)
print
(
"del sys.modules['__main__']"
,
file
=
script
)
assert_python_ok
(
filename
)
def
test_main
():
test
.
support
.
run_unittest
(
CmdLineTest
)
test
.
support
.
reap_children
()
...
...
Misc/NEWS
View file @
33363f43
...
...
@@ -12,6 +12,9 @@ What's New in Python 3.3.1?
Core and Builtins
-----------------
- Issue #15001: fix segfault on "del sys.module['
__main__
']". Patch by Victor
Stinner.
- Issue #8271: the utf-8 decoder now outputs the correct number of U+FFFD
characters when used with the '
replace
' error handler on invalid utf-8
sequences. Patch by Serhiy Storchaka, tests by Ezio Melotti.
...
...
Python/pythonrun.c
View file @
33363f43
...
...
@@ -1390,25 +1390,26 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
{
PyObject
*
m
,
*
d
,
*
v
;
const
char
*
ext
;
int
set_file_name
=
0
,
ret
;
int
set_file_name
=
0
,
ret
=
-
1
;
size_t
len
;
m
=
PyImport_AddModule
(
"__main__"
);
if
(
m
==
NULL
)
return
-
1
;
Py_INCREF
(
m
);
d
=
PyModule_GetDict
(
m
);
if
(
PyDict_GetItemString
(
d
,
"__file__"
)
==
NULL
)
{
PyObject
*
f
;
f
=
PyUnicode_DecodeFSDefault
(
filename
);
if
(
f
==
NULL
)
return
-
1
;
goto
done
;
if
(
PyDict_SetItemString
(
d
,
"__file__"
,
f
)
<
0
)
{
Py_DECREF
(
f
);
return
-
1
;
goto
done
;
}
if
(
PyDict_SetItemString
(
d
,
"__cached__"
,
Py_None
)
<
0
)
{
Py_DECREF
(
f
);
return
-
1
;
goto
done
;
}
set_file_name
=
1
;
Py_DECREF
(
f
);
...
...
@@ -1422,7 +1423,6 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
fclose
(
fp
);
if
((
pyc_fp
=
fopen
(
filename
,
"rb"
))
==
NULL
)
{
fprintf
(
stderr
,
"python: Can't reopen .pyc file
\n
"
);
ret
=
-
1
;
goto
done
;
}
/* Turn on optimization if a .pyo file is given */
...
...
@@ -1451,7 +1451,6 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
flush_io
();
if
(
v
==
NULL
)
{
PyErr_Print
();
ret
=
-
1
;
goto
done
;
}
Py_DECREF
(
v
);
...
...
@@ -1459,6 +1458,7 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
done:
if
(
set_file_name
&&
PyDict_DelItemString
(
d
,
"__file__"
))
PyErr_Clear
();
Py_DECREF
(
m
);
return
ret
;
}
...
...
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