Make the fixed sized properties parser more flexible in the face of slightly duff data
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1497006 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a9e1c0e320
commit
b37e3c6df2
@ -364,6 +364,9 @@ public class MAPIMessage extends POIDocument {
|
||||
* tries to use these to guess the correct encoding for
|
||||
* your file.
|
||||
* Bug #49441 has more on why this is needed
|
||||
*
|
||||
* TODO Try to also use PR_MESSAGE_CODEPAGE and PR_INTERNET_CPID
|
||||
* Would need to refactor some of the codepage support in HPSF first
|
||||
*/
|
||||
public void guess7BitEncoding() {
|
||||
try {
|
||||
|
@ -146,13 +146,38 @@ public abstract class PropertiesChunk extends Chunk {
|
||||
// Turn the Type and ID into helper objects
|
||||
MAPIType type = Types.getById(typeID);
|
||||
MAPIProperty prop = MAPIProperty.get(id);
|
||||
if (prop.usualType != type) {
|
||||
// Oh dear, something has gone wrong...
|
||||
logger.log(POILogger.WARN, "Type mismatch, expected ", type, " but got ", prop.usualType);
|
||||
|
||||
// Wrap properties we don't know about as custom ones
|
||||
if (prop == MAPIProperty.UNKNOWN) {
|
||||
prop = MAPIProperty.createCustom(id, type, "Unknown " + id);
|
||||
}
|
||||
if (type == null) {
|
||||
logger.log(POILogger.WARN, "Invalid type found, expected ", prop.usualType,
|
||||
" but got ", typeID, " for property ", prop);
|
||||
going = false;
|
||||
break;
|
||||
}
|
||||
|
||||
// Sanity check the property's type against the value's type
|
||||
if (prop.usualType != type) {
|
||||
// Is it an allowed substitution?
|
||||
if (type == Types.ASCII_STRING && prop.usualType == Types.UNICODE_STRING ||
|
||||
type == Types.UNICODE_STRING && prop.usualType == Types.ASCII_STRING) {
|
||||
// It's fine to go with the specified instead of the normal
|
||||
} else if (prop.usualType == Types.UNKNOWN) {
|
||||
// We don't know what this property normally is, but it has come
|
||||
// through with a valid type, so use that
|
||||
logger.log(POILogger.INFO, "Property definition for ", prop,
|
||||
" is missing a type definition, found a value with type ", type);
|
||||
} else {
|
||||
// Oh dear, something has gone wrong...
|
||||
logger.log(POILogger.WARN, "Type mismatch, expected ", prop.usualType,
|
||||
" but got ", type, " for property ", prop);
|
||||
going = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Work out how long the "data" is
|
||||
// This might be the actual data, or just a pointer
|
||||
// to another chunk which holds the data itself
|
||||
|
Loading…
Reference in New Issue
Block a user