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
6b273f7f
Commit
6b273f7f
authored
Jan 23, 2018
by
Bo Bayles
Committed by
Barry Warsaw
Jan 23, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bpo-32502: Discard 64-bit (and other invalid) hardware addresses (#5254)
parent
0bad4d63
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
38 additions
and
6 deletions
+38
-6
Lib/test/test_uuid.py
Lib/test/test_uuid.py
+26
-0
Lib/uuid.py
Lib/uuid.py
+10
-6
Misc/NEWS.d/next/Library/2018-01-20-17-15-34.bpo-32502.OXJfn7.rst
...S.d/next/Library/2018-01-20-17-15-34.bpo-32502.OXJfn7.rst
+2
-0
No files found.
Lib/test/test_uuid.py
View file @
6b273f7f
...
...
@@ -311,6 +311,32 @@ class BaseTestUUID:
node2
=
self
.
uuid
.
getnode
()
self
.
assertEqual
(
node1
,
node2
,
'%012x != %012x'
%
(
node1
,
node2
))
# bpo-32502: UUID1 requires a 48-bit identifier, but hardware identifiers
# need not necessarily be 48 bits (e.g., EUI-64).
def
test_uuid1_eui64
(
self
):
# Confirm that uuid.getnode ignores hardware addresses larger than 48
# bits. Mock out each platform's *_getnode helper functions to return
# something just larger than 48 bits to test. This will cause
# uuid.getnode to fall back on uuid._random_getnode, which will
# generate a valid value.
too_large_getter
=
lambda
:
1
<<
48
with
unittest
.
mock
.
patch
.
multiple
(
self
.
uuid
,
_node
=
None
,
# Ignore any cached node value.
_NODE_GETTERS_WIN32
=
[
too_large_getter
],
_NODE_GETTERS_UNIX
=
[
too_large_getter
],
):
node
=
self
.
uuid
.
getnode
()
self
.
assertTrue
(
0
<
node
<
(
1
<<
48
),
'%012x'
%
node
)
# Confirm that uuid1 can use the generated node, i.e., the that
# uuid.getnode fell back on uuid._random_getnode() rather than using
# the value from too_large_getter above.
try
:
self
.
uuid
.
uuid1
(
node
=
node
)
except
ValueError
as
e
:
self
.
fail
(
'uuid1 was given an invalid node ID'
)
def
test_uuid1
(
self
):
equal
=
self
.
assertEqual
...
...
Lib/uuid.py
View file @
6b273f7f
...
...
@@ -656,7 +656,12 @@ def _random_getnode():
_node
=
None
def
getnode
():
_NODE_GETTERS_WIN32
=
[
_windll_getnode
,
_netbios_getnode
,
_ipconfig_getnode
]
_NODE_GETTERS_UNIX
=
[
_unix_getnode
,
_ifconfig_getnode
,
_ip_getnode
,
_arp_getnode
,
_lanscan_getnode
,
_netstat_getnode
]
def
getnode
(
*
,
getters
=
None
):
"""Get the hardware address as a 48-bit positive integer.
The first time this runs, it may launch a separate program, which could
...
...
@@ -669,19 +674,18 @@ def getnode():
return
_node
if
sys
.
platform
==
'win32'
:
getters
=
[
_windll_getnode
,
_netbios_getnode
,
_ipconfig_getnode
]
getters
=
_NODE_GETTERS_WIN32
else
:
getters
=
[
_unix_getnode
,
_ifconfig_getnode
,
_ip_getnode
,
_arp_getnode
,
_lanscan_getnode
,
_netstat_getnode
]
getters
=
_NODE_GETTERS_UNIX
for
getter
in
getters
+
[
_random_getnode
]:
try
:
_node
=
getter
()
except
:
continue
if
_node
is
not
None
:
if
(
_node
is
not
None
)
and
(
0
<=
_node
<
(
1
<<
48
))
:
return
_node
assert
False
,
'_random_getnode() returned
None'
assert
False
,
'_random_getnode() returned
invalid value: {}'
.
format
(
_node
)
_last_timestamp
=
None
...
...
Misc/NEWS.d/next/Library/2018-01-20-17-15-34.bpo-32502.OXJfn7.rst
0 → 100644
View file @
6b273f7f
uuid.uuid1 no longer raises an exception if a 64-bit hardware address is
encountered.
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