Bug 57818 - BufferUnderrunException reading valid but difficult winmail.dat file
Summary: BufferUnderrunException reading valid but difficult winmail.dat file
Status: RESOLVED LATER
Alias: None
Product: POI
Classification: Unclassified
Component: HMEF (show other bugs)
Version: 3.11-FINAL
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: ---
Assignee: POI Developers List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-04-15 17:18 UTC by ryan
Modified: 2016-03-13 19:31 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description ryan 2015-04-15 17:18:36 UTC
While opening a winmail.dat file I get a BufferUnderrunException.  The message is properly opened and displayed if forwarded to an outlook.com email address.  

My code is trivial:

HMEFContentsExtractor ext = new HMEFContentsExtractor(tnefFile);


I cannot include a sample file as it is confidential customer information, however, I can privately share samples for testing, I have hundreds.


I have also tried and failed opening with these utilities:
* http://www.freeutils.net/source/jtnef/ java library
* http://tud.at/php/tnef/ online tnef extractor
* http://www.winmail-dat.com/online.php online tnef extractor
* http://github.com/verdammelt/tnef C utility on linux
* http://www.joshjacob.com/mac-development/tnef.php OSX app
* Forward to gmail.com email address

I was thinking the winmail.dat file was corrupt until I sent to outlook.com and it worked perfectly.




Stack trace:

org.apache.poi.util.LittleEndian$BufferUnderrunException: buffer underrun 
	at org.apache.poi.util.LittleEndian.readUShort(LittleEndian.java:804) 
	at org.apache.poi.hmef.attribute.TNEFAttribute.create(TNEFAttribute.java:61) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:74) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.process(HMEFMessage.java:98) 
	at org.apache.poi.hmef.HMEFMessage.<init>(HMEFMessage.java:63) 
	at org.apache.poi.hmef.extractor.HMEFContentsExtractor.<init>(HMEFContentsExtractor.java:63) 
... my code
Comment 1 Nick Burch 2015-04-15 19:52:05 UTC
I'd suggest attaching a debugger, and stepping through. Focus on the attributes just before it goes wrong, as well as the one it fails on - check if they look sensible, sizes and types are sensible, values read match the ones that outlook shows etc. That should help you identify if the problem is with the failing attribute, or if it's actually a problem with a preceeding one which wrecks the state
Comment 2 Dominik Stadler 2016-03-13 19:31:21 UTC
Unfortunately there is not much we can do without a sample file, therefore I am closing this for now, please reopen if you can provide a file.