From e69fbb6a560a02d0587b9075afd338a1e9073af0 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 4 Dec 2017 11:51:55 +0200 Subject: [PATCH] Fix a regression in uuid added in bpo-32107. (#4677) uuid.get_node() always must return a stable result. Also added a test for non-reproducibility of _random_getnode(). Original patch by Xavier de Gaye. --- Lib/test/test_uuid.py | 3 +++ Lib/uuid.py | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py index f113c55120..f21bd6dfa1 100644 --- a/Lib/test/test_uuid.py +++ b/Lib/test/test_uuid.py @@ -565,6 +565,9 @@ eth0 Link encap:Ethernet HWaddr 12:34:56:78:90:ab self.assertTrue(node & (1 << 40), '%012x' % node) self.check_node(node) + node2 = self.uuid._random_getnode() + self.assertNotEqual(node2, node, '%012x' % node) + @unittest.skipUnless(os.name == 'posix', 'requires Posix') def test_unix_getnode(self): if not importable('_uuid') and not importable('ctypes'): diff --git a/Lib/uuid.py b/Lib/uuid.py index cb2bc092bd..be06a6eff3 100644 --- a/Lib/uuid.py +++ b/Lib/uuid.py @@ -674,14 +674,14 @@ def getnode(): getters = [_unix_getnode, _ifconfig_getnode, _ip_getnode, _arp_getnode, _lanscan_getnode, _netstat_getnode] - for getter in getters: + for getter in getters + [_random_getnode]: try: _node = getter() except: continue if _node is not None: return _node - return _random_getnode() + assert False, '_random_getnode() returned None' _last_timestamp = None -- 2.40.0