mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	bpo-29990: Fix range checking in GB18030 decoder (#1495)
When decoding a 4-byte GB18030 sequence, the first and third byte cannot exceed 0xFE.
This commit is contained in:
		
							parent
							
								
									fa5abac1e6
								
							
						
					
					
						commit
						9da408d15b
					
				
					 3 changed files with 11 additions and 1 deletions
				
			
		| 
						 | 
					@ -48,6 +48,12 @@ class Test_GB18030(multibytecodec_support.TestBase, unittest.TestCase):
 | 
				
			||||||
        (b"abc\x84\x32\x80\x80def", "replace", 'abc\ufffd2\ufffd\ufffddef'),
 | 
					        (b"abc\x84\x32\x80\x80def", "replace", 'abc\ufffd2\ufffd\ufffddef'),
 | 
				
			||||||
        (b"abc\x81\x30\x81\x30def", "strict", 'abc\x80def'),
 | 
					        (b"abc\x81\x30\x81\x30def", "strict", 'abc\x80def'),
 | 
				
			||||||
        (b"abc\x86\x30\x81\x30def", "replace", 'abc\ufffd0\ufffd0def'),
 | 
					        (b"abc\x86\x30\x81\x30def", "replace", 'abc\ufffd0\ufffd0def'),
 | 
				
			||||||
 | 
					        # issue29990
 | 
				
			||||||
 | 
					        (b"\xff\x30\x81\x30", "strict", None),
 | 
				
			||||||
 | 
					        (b"\x81\x30\xff\x30", "strict", None),
 | 
				
			||||||
 | 
					        (b"abc\x81\x39\xff\x39\xc1\xc4", "replace", "abc\ufffd\x39\ufffd\x39\u804a"),
 | 
				
			||||||
 | 
					        (b"abc\xab\x36\xff\x30def", "replace", 'abc\ufffd\x36\ufffd\x30def'),
 | 
				
			||||||
 | 
					        (b"abc\xbf\x38\xff\x32\xc1\xc4", "ignore",  "abc\x38\x32\u804a"),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    has_iso10646 = True
 | 
					    has_iso10646 = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -317,6 +317,8 @@ Extension Modules
 | 
				
			||||||
Library
 | 
					Library
 | 
				
			||||||
-------
 | 
					-------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- bpo-29990: Fix range checking in GB18030 decoder.  Original patch by Ma Lin.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- bpo-29979: rewrite cgi.parse_multipart, reusing the FieldStorage class and
 | 
					- bpo-29979: rewrite cgi.parse_multipart, reusing the FieldStorage class and
 | 
				
			||||||
  making its results consistent with those of FieldStorage for
 | 
					  making its results consistent with those of FieldStorage for
 | 
				
			||||||
  multipart/form-data requests. Patch by Pierre Quentel.
 | 
					  multipart/form-data requests. Patch by Pierre Quentel.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -279,7 +279,9 @@ DECODER(gb18030)
 | 
				
			||||||
            REQUIRE_INBUF(4);
 | 
					            REQUIRE_INBUF(4);
 | 
				
			||||||
            c3 = INBYTE3;
 | 
					            c3 = INBYTE3;
 | 
				
			||||||
            c4 = INBYTE4;
 | 
					            c4 = INBYTE4;
 | 
				
			||||||
            if (c < 0x81 || c3 < 0x81 || c4 < 0x30 || c4 > 0x39)
 | 
					            if (c  < 0x81 || c  > 0xFE ||
 | 
				
			||||||
 | 
					                c3 < 0x81 || c3 > 0xFE ||
 | 
				
			||||||
 | 
					                c4 < 0x30 || c4 > 0x39)
 | 
				
			||||||
                return 1;
 | 
					                return 1;
 | 
				
			||||||
            c -= 0x81;  c2 -= 0x30;
 | 
					            c -= 0x81;  c2 -= 0x30;
 | 
				
			||||||
            c3 -= 0x81; c4 -= 0x30;
 | 
					            c3 -= 0x81; c4 -= 0x30;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue