mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	Issue #23681: The -b option now affects comparisons of bytes with int.
This commit is contained in:
		
							parent
							
								
									ee4c0b9dcf
								
							
						
					
					
						commit
						1dd49824df
					
				
					 5 changed files with 53 additions and 22 deletions
				
			
		|  | @ -190,9 +190,12 @@ Miscellaneous options | ||||||
| 
 | 
 | ||||||
| .. cmdoption:: -b | .. cmdoption:: -b | ||||||
| 
 | 
 | ||||||
|    Issue a warning when comparing str and bytes. Issue an error when the |    Issue a warning when comparing :class:`bytes` or :class:`bytearray` with | ||||||
|  |    :class:`str` or :class:`bytes` with :class:`int`.  Issue an error when the | ||||||
|    option is given twice (:option:`-bb`). |    option is given twice (:option:`-bb`). | ||||||
| 
 | 
 | ||||||
|  |    .. versionchanged: 3.5 | ||||||
|  |       Affects comparisons of :class:`bytes` with :class:`int`. | ||||||
| 
 | 
 | ||||||
| .. cmdoption:: -B | .. cmdoption:: -B | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -162,6 +162,8 @@ Some smaller changes made to the core Python language are: | ||||||
|   error handlers now works with decoding and translating. |   error handlers now works with decoding and translating. | ||||||
|   (Contributed by Serhiy Storchaka in :issue:`19676` and :issue:`22286`.) |   (Contributed by Serhiy Storchaka in :issue:`19676` and :issue:`22286`.) | ||||||
| 
 | 
 | ||||||
|  | * The :option:`-b` option now affects comparisons of :class:`bytes` with | ||||||
|  |   :class:`int`.  (Contributed by Serhiy Storchaka in :issue:`23681`) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| New Modules | New Modules | ||||||
|  |  | ||||||
|  | @ -1338,20 +1338,35 @@ def test_return_self(self): | ||||||
|         b = bytearray() |         b = bytearray() | ||||||
|         self.assertFalse(b.replace(b'', b'') is b) |         self.assertFalse(b.replace(b'', b'') is b) | ||||||
| 
 | 
 | ||||||
|  |     @unittest.skipUnless(sys.flags.bytes_warning, | ||||||
|  |                          "BytesWarning is needed for this test: use -bb option") | ||||||
|     def test_compare(self): |     def test_compare(self): | ||||||
|         if sys.flags.bytes_warning: |         def bytes_warning(): | ||||||
|             def bytes_warning(): |             return test.support.check_warnings(('', BytesWarning)) | ||||||
|                 return test.support.check_warnings(('', BytesWarning)) |         with bytes_warning(): | ||||||
|             with bytes_warning(): |             b'' == '' | ||||||
|                 b'' == '' |         with bytes_warning(): | ||||||
|             with bytes_warning(): |             '' == b'' | ||||||
|                 b'' != '' |         with bytes_warning(): | ||||||
|             with bytes_warning(): |             b'' != '' | ||||||
|                 bytearray(b'') == '' |         with bytes_warning(): | ||||||
|             with bytes_warning(): |             '' != b'' | ||||||
|                 bytearray(b'') != '' |         with bytes_warning(): | ||||||
|         else: |             bytearray(b'') == '' | ||||||
|             self.skipTest("BytesWarning is needed for this test: use -bb option") |         with bytes_warning(): | ||||||
|  |             '' == bytearray(b'') | ||||||
|  |         with bytes_warning(): | ||||||
|  |             bytearray(b'') != '' | ||||||
|  |         with bytes_warning(): | ||||||
|  |             '' != bytearray(b'') | ||||||
|  |         with bytes_warning(): | ||||||
|  |             b'\0' == 0 | ||||||
|  |         with bytes_warning(): | ||||||
|  |             0 == b'\0' | ||||||
|  |         with bytes_warning(): | ||||||
|  |             b'\0' != 0 | ||||||
|  |         with bytes_warning(): | ||||||
|  |             0 != b'\0' | ||||||
| 
 | 
 | ||||||
|     # Optimizations: |     # Optimizations: | ||||||
|     # __iter__? (optimization) |     # __iter__? (optimization) | ||||||
|  |  | ||||||
|  | @ -10,6 +10,8 @@ Release date: 2015-03-28 | ||||||
| Core and Builtins | Core and Builtins | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #23681: The -b option now affects comparisons of bytes with int. | ||||||
|  | 
 | ||||||
| - Issue #23632: Memoryviews now allow tuple indexing (including for | - Issue #23632: Memoryviews now allow tuple indexing (including for | ||||||
|   multi-dimensional memoryviews). |   multi-dimensional memoryviews). | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1385,14 +1385,23 @@ bytes_richcompare(PyBytesObject *a, PyBytesObject *b, int op) | ||||||
| 
 | 
 | ||||||
|     /* Make sure both arguments are strings. */ |     /* Make sure both arguments are strings. */ | ||||||
|     if (!(PyBytes_Check(a) && PyBytes_Check(b))) { |     if (!(PyBytes_Check(a) && PyBytes_Check(b))) { | ||||||
|         if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE) && |         if (Py_BytesWarningFlag && (op == Py_EQ || op == Py_NE)) { | ||||||
|             (PyObject_IsInstance((PyObject*)a, |             if (PyObject_IsInstance((PyObject*)a, | ||||||
|                                  (PyObject*)&PyUnicode_Type) || |                                     (PyObject*)&PyUnicode_Type) || | ||||||
|             PyObject_IsInstance((PyObject*)b, |                 PyObject_IsInstance((PyObject*)b, | ||||||
|                                  (PyObject*)&PyUnicode_Type))) { |                                     (PyObject*)&PyUnicode_Type)) { | ||||||
|             if (PyErr_WarnEx(PyExc_BytesWarning, |                 if (PyErr_WarnEx(PyExc_BytesWarning, | ||||||
|                         "Comparison between bytes and string", 1)) |                             "Comparison between bytes and string", 1)) | ||||||
|                 return NULL; |                     return NULL; | ||||||
|  |             } | ||||||
|  |             else if (PyObject_IsInstance((PyObject*)a, | ||||||
|  |                                     (PyObject*)&PyLong_Type) || | ||||||
|  |                 PyObject_IsInstance((PyObject*)b, | ||||||
|  |                                     (PyObject*)&PyLong_Type)) { | ||||||
|  |                 if (PyErr_WarnEx(PyExc_BytesWarning, | ||||||
|  |                             "Comparison between bytes and int", 1)) | ||||||
|  |                     return NULL; | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         result = Py_NotImplemented; |         result = Py_NotImplemented; | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Serhiy Storchaka
						Serhiy Storchaka