mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-24 20:51:16 +03:00 
			
		
		
		
	BYTE tags of variable length are only single strings
This commit is contained in:
		
							parent
							
								
									794e9f0f0e
								
							
						
					
					
						commit
						7ecb5aaf7e
					
				|  | @ -319,13 +319,13 @@ def test_empty_values(): | |||
| 
 | ||||
| def test_PhotoshopInfo(tmp_path): | ||||
|     with Image.open("Tests/images/issue_2278.tif") as im: | ||||
|         assert len(im.tag_v2[34377]) == 1 | ||||
|         assert isinstance(im.tag_v2[34377][0], bytes) | ||||
|         assert len(im.tag_v2[34377]) == 70 | ||||
|         assert isinstance(im.tag_v2[34377], bytes) | ||||
|         out = str(tmp_path / "temp.tiff") | ||||
|         im.save(out) | ||||
|     with Image.open(out) as reloaded: | ||||
|         assert len(reloaded.tag_v2[34377]) == 1 | ||||
|         assert isinstance(reloaded.tag_v2[34377][0], bytes) | ||||
|         assert len(reloaded.tag_v2[34377]) == 70 | ||||
|         assert isinstance(reloaded.tag_v2[34377], bytes) | ||||
| 
 | ||||
| 
 | ||||
| def test_too_many_entries(): | ||||
|  |  | |||
|  | @ -573,8 +573,10 @@ class ImageFileDirectory_v2(MutableMapping): | |||
|         # Spec'd length == 1, Actual > 1, Warn and truncate. Formerly barfed. | ||||
|         # No Spec, Actual length 1, Formerly (<4.2) returned a 1 element tuple. | ||||
|         # Don't mess with the legacy api, since it's frozen. | ||||
|         if (info.length == 1) or ( | ||||
|             info.length is None and len(values) == 1 and not legacy_api | ||||
|         if ( | ||||
|             (info.length == 1) | ||||
|             or self.tagtype[tag] == TiffTags.BYTE | ||||
|             or (info.length is None and len(values) == 1 and not legacy_api) | ||||
|         ): | ||||
|             # Don't mess with the legacy api, since it's frozen. | ||||
|             if legacy_api and self.tagtype[tag] in [ | ||||
|  |  | |||
							
								
								
									
										26
									
								
								src/encode.c
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								src/encode.c
									
									
									
									
									
								
							|  | @ -790,28 +790,24 @@ PyImaging_LibTiffEncoderNew(PyObject* self, PyObject* args) | |||
| 
 | ||||
|         if (!is_core_tag) { | ||||
|             // Register field for non core tags.
 | ||||
|             if (type == TIFF_BYTE) { | ||||
|                 is_var_length = 1; | ||||
|             } | ||||
|             if (ImagingLibTiffMergeFieldInfo(&encoder->state, type, key_int, is_var_length)) { | ||||
|                 continue; | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if (is_var_length) { | ||||
|         if (type == TIFF_BYTE) { | ||||
|             status = ImagingLibTiffSetField(&encoder->state, | ||||
|                     (ttag_t) key_int, | ||||
|                     PyBytes_Size(value), PyBytes_AsString(value)); | ||||
|         } else if (is_var_length) { | ||||
|             Py_ssize_t len,i; | ||||
|             TRACE(("Setting from Tuple: %d \n", key_int)); | ||||
|             len = PyTuple_Size(value); | ||||
| 
 | ||||
|             if (type == TIFF_BYTE) { | ||||
|                 UINT8 *av; | ||||
|                 /* malloc check ok, calloc checks for overflow */ | ||||
|                 av = calloc(len, sizeof(UINT8)); | ||||
|                 if (av) { | ||||
|                     for (i=0;i<len;i++) { | ||||
|                         av[i] = (UINT8)PyLong_AsLong(PyTuple_GetItem(value,i)); | ||||
|                     } | ||||
|                     status = ImagingLibTiffSetField(&encoder->state, (ttag_t) key_int, len, av); | ||||
|                     free(av); | ||||
|                 } | ||||
|             } else if (type == TIFF_SHORT) { | ||||
|             if (type == TIFF_SHORT) { | ||||
|                 UINT16 *av; | ||||
|                 /* malloc check ok, calloc checks for overflow */ | ||||
|                 av = calloc(len, sizeof(UINT16)); | ||||
|  | @ -914,10 +910,6 @@ PyImaging_LibTiffEncoderNew(PyObject* self, PyObject* args) | |||
|                 status = ImagingLibTiffSetField(&encoder->state, | ||||
|                         (ttag_t) key_int, | ||||
|                         (FLOAT64)PyFloat_AsDouble(value)); | ||||
|             } else if (type == TIFF_BYTE) { | ||||
|                 status = ImagingLibTiffSetField(&encoder->state, | ||||
|                         (ttag_t) key_int, | ||||
|                         (UINT8)PyLong_AsLong(value)); | ||||
|             } else if (type == TIFF_SBYTE) { | ||||
|                 status = ImagingLibTiffSetField(&encoder->state, | ||||
|                         (ttag_t) key_int, | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user