From 25bd98d8e9c5fe4627ac488d2ea46777ebcd6cdd Mon Sep 17 00:00:00 2001 From: Eugene Livis Date: Fri, 11 Mar 2016 15:02:35 -0500 Subject: [PATCH] log internal Java and Apache errors as WARNING in Embedded File Extractor --- .../embeddedfileextractor/Bundle.properties | 1 + .../embeddedfileextractor/ImageExtractor.java | 136 +++++++++++++++--- 2 files changed, 116 insertions(+), 21 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle.properties b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle.properties index 06b5b5a44f..e2e029d495 100644 --- a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle.properties +++ b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/Bundle.properties @@ -35,6 +35,7 @@ EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err=Ppt conta EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err=Pptx container could not be initialized while reading: {0} EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err=Xls container could not be initialized while reading: {0} EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err=Xlsx container could not be initialized while reading: {0} +EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err=Embedded File Extractor is unable to read content of {0} EmbeddedFileExtractorIngestModule.ImageExtractor.extractImage.addToDB.exception.msg=Unable to add the derived files to the database. EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=Could not get path for image extraction from Abstract File\: {0} EmbeddedFileExtractorIngestModule.ImageExtractor.getOutputFolderPath.exception.msg=Could not get path for image extraction from Abstract File: {0} diff --git a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/ImageExtractor.java b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/ImageExtractor.java index c916aa7f55..cb601c62a7 100755 --- a/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/ImageExtractor.java +++ b/Core/src/org/sleuthkit/autopsy/modules/embeddedfileextractor/ImageExtractor.java @@ -25,7 +25,6 @@ import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; -import org.apache.poi.OldFileFormatException; import org.apache.poi.hslf.model.Picture; import org.apache.poi.hslf.usermodel.PictureData; import org.apache.poi.hslf.usermodel.SlideShow; @@ -210,13 +209,23 @@ class ImageExtractor { HWPFDocument doc = null; try { doc = new HWPFDocument(new ReadContentInputStream(af)); - } catch (Throwable ex) { + } catch (Throwable ignore) { // instantiating POI containers throw RuntimeExceptions logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.docContainer.init.err", af.getName())); //NON-NLS return null; } - PicturesTable pictureTable = doc.getPicturesTable(); - List listOfAllPictures = pictureTable.getAllPictures(); + + PicturesTable pictureTable = null; + List listOfAllPictures = null; + try { + pictureTable = doc.getPicturesTable(); + listOfAllPictures = pictureTable.getAllPictures(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + String outputFolderPath; if (listOfAllPictures.isEmpty()) { return null; @@ -227,9 +236,17 @@ class ImageExtractor { return null; } listOfExtractedImages = new ArrayList<>(); + byte[] data = null; for (org.apache.poi.hwpf.usermodel.Picture picture : listOfAllPictures) { String fileName = picture.suggestFullFileName(); - writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), picture.getContent()); + try { + data = picture.getContent(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), data); // TODO Extract more info from the Picture viz ctime, crtime, atime, mtime listOfExtractedImages.add(new ExtractedImage(fileName, getFileRelativePath(fileName), picture.getSize(), af)); } @@ -250,12 +267,19 @@ class ImageExtractor { XWPFDocument docx = null; try { docx = new XWPFDocument(new ReadContentInputStream(af)); - } catch (Throwable ex) { + } catch (Throwable ignore) { // instantiating POI containers throw RuntimeExceptions logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.docxContainer.init.err", af.getName())); //NON-NLS return null; } - List listOfAllPictures = docx.getAllPictures(); + List listOfAllPictures = null; + try { + listOfAllPictures = docx.getAllPictures(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } // if no images are extracted from the PPT, return null, else initialize // the output folder for image extraction. @@ -270,9 +294,17 @@ class ImageExtractor { return null; } listOfExtractedImages = new ArrayList<>(); + byte[] data = null; for (XWPFPictureData xwpfPicture : listOfAllPictures) { String fileName = xwpfPicture.getFileName(); - writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), xwpfPicture.getData()); + try { + data = xwpfPicture.getData(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), data); listOfExtractedImages.add(new ExtractedImage(fileName, getFileRelativePath(fileName), xwpfPicture.getData().length, af)); } return listOfExtractedImages; @@ -291,14 +323,21 @@ class ImageExtractor { SlideShow ppt = null; try { ppt = new SlideShow(new ReadContentInputStream(af)); - } catch (Throwable ex) { + } catch (Throwable ignore) { // instantiating POI containers throw RuntimeExceptions logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.pptContainer.init.err", af.getName())); //NON-NLS return null; } //extract all pictures contained in the presentation - PictureData[] listOfAllPictures = ppt.getPictureData(); + PictureData[] listOfAllPictures = null; + try { + listOfAllPictures = ppt.getPictureData(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } // if no images are extracted from the PPT, return null, else initialize // the output folder for image extraction. @@ -317,6 +356,7 @@ class ImageExtractor { // extraction path - outputFolder/image_number.ext int i = 0; listOfExtractedImages = new ArrayList<>(); + byte[] data = null; for (PictureData pictureData : listOfAllPictures) { // Get image extension, generate image name, write image to the module @@ -343,7 +383,14 @@ class ImageExtractor { continue; } String imageName = UNKNOWN_NAME_PREFIX + i + ext; //NON-NLS - writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), pictureData.getData()); + try { + data = pictureData.getData(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), data); listOfExtractedImages.add(new ExtractedImage(imageName, getFileRelativePath(imageName), pictureData.getData().length, af)); i++; } @@ -363,12 +410,19 @@ class ImageExtractor { XMLSlideShow pptx; try { pptx = new XMLSlideShow(new ReadContentInputStream(af)); - } catch (Throwable ex) { + } catch (Throwable ignore) { // instantiating POI containers throw RuntimeExceptions logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.pptxContainer.init.err", af.getName())); //NON-NLS return null; } - List listOfAllPictures = pptx.getAllPictures(); + List listOfAllPictures = null; + try { + listOfAllPictures = pptx.getAllPictures(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } // if no images are extracted from the PPT, return null, else initialize // the output folder for image extraction. @@ -384,12 +438,20 @@ class ImageExtractor { } listOfExtractedImages = new ArrayList<>(); + byte[] data = null; for (XSLFPictureData xslsPicture : listOfAllPictures) { // get image file name, write it to the module outputFolder, and add // it to the listOfExtractedImageAbstractFiles. String fileName = xslsPicture.getFileName(); - writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), xslsPicture.getData()); + try { + data = xslsPicture.getData(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + writeExtractedImage(Paths.get(outputFolderPath, fileName).toString(), data); listOfExtractedImages.add(new ExtractedImage(fileName, getFileRelativePath(fileName), xslsPicture.getData().length, af)); } @@ -412,13 +474,21 @@ class ImageExtractor { Workbook xls; try { xls = new HSSFWorkbook(new ReadContentInputStream(af)); - } catch (Throwable ex) { + } catch (Throwable ignore) { // instantiating POI containers throw RuntimeExceptions - logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err", af.getName()) + af.getName()); //NON-NLS + logger.log(Level.WARNING, "{0}{1}", new Object[]{NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsContainer.init.err", af.getName()), af.getName()}); //NON-NLS return null; } - List listOfAllPictures = xls.getAllPictures(); + List listOfAllPictures = null; + try { + listOfAllPictures = xls.getAllPictures(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + // if no images are extracted from the PPT, return null, else initialize // the output folder for image extraction. String outputFolderPath; @@ -434,9 +504,17 @@ class ImageExtractor { int i = 0; listOfExtractedImages = new ArrayList<>(); + byte[] data = null; for (org.apache.poi.ss.usermodel.PictureData pictureData : listOfAllPictures) { String imageName = UNKNOWN_NAME_PREFIX + i + "." + pictureData.suggestFileExtension(); //NON-NLS - writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), pictureData.getData()); + try { + data = pictureData.getData(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), data); listOfExtractedImages.add(new ExtractedImage(imageName, getFileRelativePath(imageName), pictureData.getData().length, af)); i++; } @@ -457,13 +535,21 @@ class ImageExtractor { Workbook xlsx; try { xlsx = new XSSFWorkbook(new ReadContentInputStream(af)); - } catch (Throwable ex) { + } catch (Throwable ignore) { // instantiating POI containers throw RuntimeExceptions logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.xlsxContainer.init.err", af.getName())); //NON-NLS return null; } - List listOfAllPictures = xlsx.getAllPictures(); + List listOfAllPictures = null; + try { + listOfAllPictures = xlsx.getAllPictures(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + // if no images are extracted from the PPT, return null, else initialize // the output folder for image extraction. String outputFolderPath; @@ -479,9 +565,17 @@ class ImageExtractor { int i = 0; listOfExtractedImages = new ArrayList<>(); + byte[] data = null; for (org.apache.poi.ss.usermodel.PictureData pictureData : listOfAllPictures) { String imageName = UNKNOWN_NAME_PREFIX + i + "." + pictureData.suggestFileExtension(); - writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), pictureData.getData()); + try { + data = pictureData.getData(); + } catch (Exception ignore) { + // log internal Java and Apache errors as WARNING + logger.log(Level.WARNING, NbBundle.getMessage(this.getClass(), "EmbeddedFileExtractorIngestModule.ImageExtractor.processing.err", af.getName())); //NON-NLS + return null; + } + writeExtractedImage(Paths.get(outputFolderPath, imageName).toString(), data); listOfExtractedImages.add(new ExtractedImage(imageName, getFileRelativePath(imageName), pictureData.getData().length, af)); i++; }