Skip to content

Commit

Permalink
sepinf-inc#2294: better exception handling
Browse files Browse the repository at this point in the history
  • Loading branch information
aberenguel committed Aug 19, 2024
1 parent b663dd3 commit 7c221e6
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
package iped.parsers.whatsapp;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

import com.dd.plist.NSDictionary;
import com.dd.plist.NSObject;
import com.dd.plist.PropertyListFormatException;
import com.dd.plist.PropertyListParser;

public class WAAccount extends WAContact {

private static final Logger logger = LoggerFactory.getLogger(WAAccount.class);

private boolean isUnknown = false;

public WAAccount(String id) {
Expand All @@ -35,7 +34,7 @@ public String getTitle() {
return "WhatsApp Account: " + getName(); //$NON-NLS-1$
}

public static WAAccount getFromAndroidXml(InputStream is) {
public static WAAccount getFromAndroidXml(InputStream is) throws SAXException, IOException {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Expand Down Expand Up @@ -85,14 +84,12 @@ public static WAAccount getFromAndroidXml(InputStream is) {
account.setStatus(value);
}
return account;

} catch (Exception e) {
logger.warn("Error parsing WhatsApp account xml for Android: {}", e);
return null;
} catch (ParserConfigurationException | XPathExpressionException e) {
throw new RuntimeException(e);
}
}

public static WAAccount getFromIOSPlist(InputStream is) {
public static WAAccount getFromIOSPlist(InputStream is) throws SAXException, IOException {
try {
NSDictionary rootDict = (NSDictionary) PropertyListParser.parse(is);
NSObject value = rootDict.get("OwnJabberID");
Expand All @@ -116,14 +113,21 @@ public static WAAccount getFromIOSPlist(InputStream is) {
account.setStatus(value.toString());

return account;

} catch (Exception e) {
e.printStackTrace();
return null;
} catch ( PropertyListFormatException | ParseException | ParserConfigurationException e) {
throw new RuntimeException(e);
}
}

public static void main(String[] args) {
public boolean isUnknown() {
return isUnknown;
}

public void setUnknown(boolean isUnknown) {
this.isUnknown = isUnknown;
}

/*
public static void main(String[] args) throws SAXException {
try (FileInputStream fis = new FileInputStream(
"c:/users/nassif/downloads/group.net.whatsapp.WhatsApp.shared.plist")) {
WAAccount a = getFromIOSPlist(fis);
Expand All @@ -138,13 +142,7 @@ public static void main(String[] args) {
e.printStackTrace();
}
}
*/

public boolean isUnknown() {
return isUnknown;
}

public void setUnknown(boolean isUnknown) {
this.isUnknown = isUnknown;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import org.apache.tika.mime.MediaType;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.XHTMLContentHandler;
import org.apache.xerces.impl.io.MalformedByteSequenceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.ContentHandler;
Expand Down Expand Up @@ -280,10 +281,14 @@ public void parse(InputStream stream, ContentHandler handler, Metadata metadata,

} catch (Exception e) {
// log all whatsapp exceptions
logger.error("Error parsing WhatsApp item: " + item, e);
if (e.getCause() != null && (e.getCause() instanceof MalformedByteSequenceException)) {
logger.warn("Possibly corrupted file: {} > {}", item, e.getMessage());
} else {
logger.error("Error parsing WhatsApp: " + item, e);
}

throw e;
}

}

private void createReport(List<Chat> chatList, IItemSearcher searcher, WAContactsDirectory contacts,
Expand Down

0 comments on commit 7c221e6

Please sign in to comment.