mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-01 00:17:27 +03:00 
			
		
		
		
	Limit expected number of characters to nencoding
This commit is contained in:
		
							parent
							
								
									ce486e77b1
								
							
						
					
					
						commit
						93805d5257
					
				
							
								
								
									
										
											BIN
										
									
								
								Tests/fonts/10x20-ISO8859-1-fewer-characters.pcf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Tests/fonts/10x20-ISO8859-1-fewer-characters.pcf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							|  | @ -49,6 +49,14 @@ def test_sanity(request, tmp_path): | ||||||
|     save_font(request, tmp_path) |     save_font(request, tmp_path) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_less_than_256_characters(): | ||||||
|  |     with open("Tests/fonts/10x20-ISO8859-1-fewer-characters.pcf", "rb") as test_file: | ||||||
|  |         font = PcfFontFile.PcfFontFile(test_file) | ||||||
|  |     assert isinstance(font, FontFile.FontFile) | ||||||
|  |     # check the number of characters in the font | ||||||
|  |     assert len([_f for _f in font.glyph if _f]) == 127 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| def test_invalid_file(): | def test_invalid_file(): | ||||||
|     with open("Tests/images/flower.jpg", "rb") as fp: |     with open("Tests/images/flower.jpg", "rb") as fp: | ||||||
|         with pytest.raises(SyntaxError): |         with pytest.raises(SyntaxError): | ||||||
|  |  | ||||||
|  | @ -84,8 +84,7 @@ class PcfFontFile(FontFile.FontFile): | ||||||
|         # |         # | ||||||
|         # create glyph structure |         # create glyph structure | ||||||
| 
 | 
 | ||||||
|         for ch in range(256): |         for ch, ix in enumerate(encoding): | ||||||
|             ix = encoding[ch] |  | ||||||
|             if ix is not None: |             if ix is not None: | ||||||
|                 x, y, l, r, w, a, d, f = metrics[ix] |                 x, y, l, r, w, a, d, f = metrics[ix] | ||||||
|                 glyph = (w, 0), (l, d - y, x + l, d), (0, 0, x, y), bitmaps[ix] |                 glyph = (w, 0), (l, d - y, x + l, d), (0, 0, x, y), bitmaps[ix] | ||||||
|  | @ -219,10 +218,6 @@ class PcfFontFile(FontFile.FontFile): | ||||||
|         return bitmaps |         return bitmaps | ||||||
| 
 | 
 | ||||||
|     def _load_encoding(self): |     def _load_encoding(self): | ||||||
| 
 |  | ||||||
|         # map character code to bitmap index |  | ||||||
|         encoding = [None] * 256 |  | ||||||
| 
 |  | ||||||
|         fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) |         fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) | ||||||
| 
 | 
 | ||||||
|         first_col, last_col = i16(fp.read(2)), i16(fp.read(2)) |         first_col, last_col = i16(fp.read(2)), i16(fp.read(2)) | ||||||
|  | @ -232,6 +227,9 @@ class PcfFontFile(FontFile.FontFile): | ||||||
| 
 | 
 | ||||||
|         nencoding = (last_col - first_col + 1) * (last_row - first_row + 1) |         nencoding = (last_col - first_col + 1) * (last_row - first_row + 1) | ||||||
| 
 | 
 | ||||||
|  |         # map character code to bitmap index | ||||||
|  |         encoding = [None] * min(256, nencoding) | ||||||
|  | 
 | ||||||
|         encoding_offsets = [i16(fp.read(2)) for _ in range(nencoding)] |         encoding_offsets = [i16(fp.read(2)) for _ in range(nencoding)] | ||||||
| 
 | 
 | ||||||
|         for i in range(first_col, len(encoding)): |         for i in range(first_col, len(encoding)): | ||||||
|  | @ -244,7 +242,5 @@ class PcfFontFile(FontFile.FontFile): | ||||||
|             except UnicodeDecodeError: |             except UnicodeDecodeError: | ||||||
|                 # character is not supported in selected encoding |                 # character is not supported in selected encoding | ||||||
|                 pass |                 pass | ||||||
|             except IndexError: |  | ||||||
|                 break |  | ||||||
| 
 | 
 | ||||||
|         return encoding |         return encoding | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user