diff -ur a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst --- a/Doc/library/stdtypes.rst 2016-12-16 19:32:21.000000000 -0500 +++ b/Doc/library/stdtypes.rst 2016-12-16 19:34:50.000000000 -0500 @@ -2316,7 +2316,7 @@ This :class:`bytes` class method returns a bytes object, decoding the given string object. The string must contain two hexadecimal digits per - byte, with ASCII spaces being ignored. + byte, with ASCII whitespace being ignored. >>> bytes.fromhex('2Ef0 F1f2 ') b'.\xf0\xf1\xf2' @@ -2384,7 +2384,7 @@ This :class:`bytearray` class method returns bytearray object, decoding the given string object. The string must contain two hexadecimal digits - per byte, with ASCII spaces being ignored. + per byte, with ASCII whitespace being ignored. >>> bytearray.fromhex('2Ef0 F1f2 ') bytearray(b'.\xf0\xf1\xf2') diff -ur a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py --- a/Lib/test/test_bytes.py 2016-12-09 19:05:07.000000000 -0500 +++ b/Lib/test/test_bytes.py 2016-12-16 19:37:12.000000000 -0500 @@ -293,6 +293,14 @@ b = bytearray([0x1a, 0x2b, 0x30]) self.assertEqual(self.type2test.fromhex('1a2B30'), b) self.assertEqual(self.type2test.fromhex(' 1A 2B 30 '), b) + + # check that ASCII whitespace is ignored + self.assertEqual(self.type2test.fromhex(' 1A\n2B\t30\v'), b) + for c in "\x09\x0A\x0B\x0C\x0D\x20": + self.assertEqual(self.type2test.fromhex(c), self.type2test()) + for c in "\x1C\x1D\x1E\x1F\x85\xa0\u2000\u2002\u2028": + self.assertRaises(ValueError, self.type2test.fromhex, c) + self.assertEqual(self.type2test.fromhex('0000'), b'\0\0') self.assertRaises(TypeError, self.type2test.fromhex, b'1B') self.assertRaises(ValueError, self.type2test.fromhex, 'a') diff -ur a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c 2016-12-09 19:01:49.000000000 -0500 +++ b/Objects/bytesobject.c 2016-12-09 19:02:39.000000000 -0500 @@ -2379,10 +2379,10 @@ end = str + hexlen; while (str < end) { /* skip over spaces in the input */ - if (*str == ' ') { + if (Py_ISSPACE(*str)) { do { str++; - } while (*str == ' '); + } while (Py_ISSPACE(*str)); if (str >= end) break; }