mirror of
				https://github.com/Frooodle/Stirling-PDF.git
				synced 2025-10-25 11:17:28 +02:00 
			
		
		
		
	Fix ConcurrentModificationException by modifying resources outside the iteration. (#1719)
Fix ConcurrentModificationException by collecting XObject names - Changed to use a list to collect XObject names before removal. - Avoids ConcurrentModificationException by modifying resources outside the iteration. Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									e1d0f2cd3e
								
							
						
					
					
						commit
						fa0152aa2d
					
				| @ -1,6 +1,8 @@ | ||||
| package stirling.software.SPDF.service; | ||||
| 
 | ||||
| import java.io.IOException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import org.apache.pdfbox.cos.COSName; | ||||
| import org.apache.pdfbox.pdmodel.PDDocument; | ||||
| @ -16,7 +18,7 @@ public class PdfImageRemovalService { | ||||
|     /** | ||||
|      * Removes all image objects from the provided PDF document. | ||||
|      * | ||||
|      * This method iterates over each page in the document and removes any image XObjects found | ||||
|      * <p>This method iterates over each page in the document and removes any image XObjects found | ||||
|      * in the page's resources. | ||||
|      * | ||||
|      * @param document The PDF document from which images will be removed. | ||||
| @ -27,14 +29,22 @@ public class PdfImageRemovalService { | ||||
|         // Iterate over each page in the PDF document | ||||
|         for (PDPage page : document.getPages()) { | ||||
|             PDResources resources = page.getResources(); | ||||
|             // Collect the XObject names to remove | ||||
|             List<COSName> namesToRemove = new ArrayList<>(); | ||||
| 
 | ||||
|             // Iterate over all XObject names in the page's resources | ||||
|             for (COSName name : resources.getXObjectNames()) { | ||||
|                 // Check if the XObject is an image | ||||
|                 if (resources.isImageXObject(name)) { | ||||
|                     // Remove the image XObject by setting it to null | ||||
|                     resources.put(name, (PDXObject) null); | ||||
|                     // Collect the name for removal | ||||
|                     namesToRemove.add(name); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // Now, modify the resources by removing the collected names | ||||
|             for (COSName name : namesToRemove) { | ||||
|                 resources.put(name, (PDXObject) null); | ||||
|             } | ||||
|         } | ||||
|         return document; | ||||
|     } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user