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
1588a3b3
Commit
1588a3b3
authored
Sep 09, 2016
by
Steve Dower
Browse files
Options
Browse Files
Download
Plain Diff
Issue #27932: Fixes memory leak in platform.win32_ver()
parents
b44acebc
6a294a54
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
29 deletions
+35
-29
Lib/platform.py
Lib/platform.py
+33
-29
Misc/NEWS
Misc/NEWS
+2
-0
No files found.
Lib/platform.py
View file @
1588a3b3
...
...
@@ -497,57 +497,61 @@ _WIN32_SERVER_RELEASES = {
(6, None): "post2012ServerR2",
}
def _get_real_winver(maj, min, build):
if maj < 6 or (maj == 6 and min < 2):
return maj, min, build
from ctypes import (c_buffer, POINTER, byref, create_unicode_buffer,
Structure, WinDLL)
from ctypes.wintypes import DWORD, HANDLE
if sys.platform == '
win32
':
import ctypes
import ctypes.wintypes
class VS_FIXEDFILEINFO(Structure):
class VS_FIXEDFILEINFO(
ctypes.
Structure):
_fields_ = [
("dwSignature", DWORD),
("dwStrucVersion", DWORD),
("dwFileVersionMS", DWORD),
("dwFileVersionLS", DWORD),
("dwProductVersionMS", DWORD),
("dwProductVersionLS", DWORD),
("dwFileFlagsMask", DWORD),
("dwFileFlags", DWORD),
("dwFileOS", DWORD),
("dwFileType", DWORD),
("dwFileSubtype", DWORD),
("dwFileDateMS", DWORD),
("dwFileDateLS", DWORD),
("dwSignature",
ctypes.wintypes.
DWORD),
("dwStrucVersion",
ctypes.wintypes.
DWORD),
("dwFileVersionMS",
ctypes.wintypes.
DWORD),
("dwFileVersionLS",
ctypes.wintypes.
DWORD),
("dwProductVersionMS",
ctypes.wintypes.
DWORD),
("dwProductVersionLS",
ctypes.wintypes.
DWORD),
("dwFileFlagsMask",
ctypes.wintypes.
DWORD),
("dwFileFlags",
ctypes.wintypes.
DWORD),
("dwFileOS",
ctypes.wintypes.
DWORD),
("dwFileType",
ctypes.wintypes.
DWORD),
("dwFileSubtype",
ctypes.wintypes.
DWORD),
("dwFileDateMS",
ctypes.wintypes.
DWORD),
("dwFileDateLS",
ctypes.wintypes.
DWORD),
]
kernel32 = WinDLL('
kernel32
')
version = WinDLL('
version
')
P_VS_FIXEDFILEINFO = ctypes.POINTER(VS_FIXEDFILEINFO)
def _get_real_winver(maj, min, build):
if maj < 6 or (maj == 6 and min < 2):
return maj, min, build
kernel32 = ctypes.WinDLL('
kernel32
')
# We will immediately double the length up to MAX_PATH, but the
# path may be longer, so we retry until the returned string is
# shorter than our buffer.
name_len = actual_len = 130
while actual_len == name_len:
name_len *= 2
name = create_unicode_buffer(name_len)
actual_len = kernel32.GetModuleFileNameW(HANDLE(kernel32._handle),
name, len(name))
name = ctypes.create_unicode_buffer(name_len)
actual_len = kernel32.GetModuleFileNameW(
ctypes.wintypes.HANDLE(kernel32._handle),
name, len(name)
)
if not actual_len:
return maj, min, build
version = ctypes.WinDLL('
version
')
size = version.GetFileVersionInfoSizeW(name, None)
if not size:
return maj, min, build
ver_block = c_buffer(size)
ver_block = c
types.c
_buffer(size)
if (not version.GetFileVersionInfoW(name, None, size, ver_block) or
not ver_block):
return maj, min, build
pvi = POINTER(VS_FIXEDFILEINFO)()
if not version.VerQueryValueW(ver_block, "", byref(pvi), byref(DWORD())):
pvi = P_VS_FIXEDFILEINFO()
if not version.VerQueryValueW(ver_block, "",
ctypes.byref(pvi), ctypes.byref(ctypes.wintypes.DWORD())):
return maj, min, build
maj = pvi.contents.dwProductVersionMS >> 16
...
...
Misc/NEWS
View file @
1588a3b3
...
...
@@ -125,6 +125,8 @@ Core and Builtins
Library
-------
-
Issue
#
27932
:
Fixes
memory
leak
in
platform
.
win32_ver
()
-
Issue
#
14977
:
mailcap
now
respects
the
order
of
the
lines
in
the
mailcap
files
(
"first match"
),
as
required
by
RFC
1542.
Patch
by
Michael
Lazar
.
...
...
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