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
|
* tries to use these to guess the correct encoding for
|
||||||
* your file.
|
* your file.
|
||||||
* Bug #49441 has more on why this is needed
|
* 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() {
|
public void guess7BitEncoding() {
|
||||||
try {
|
try {
|
||||||
|
@ -146,11 +146,36 @@ public abstract class PropertiesChunk extends Chunk {
|
|||||||
// Turn the Type and ID into helper objects
|
// Turn the Type and ID into helper objects
|
||||||
MAPIType type = Types.getById(typeID);
|
MAPIType type = Types.getById(typeID);
|
||||||
MAPIProperty prop = MAPIProperty.get(id);
|
MAPIProperty prop = MAPIProperty.get(id);
|
||||||
|
|
||||||
|
// 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) {
|
if (prop.usualType != type) {
|
||||||
// Oh dear, something has gone wrong...
|
// Is it an allowed substitution?
|
||||||
logger.log(POILogger.WARN, "Type mismatch, expected ", type, " but got ", prop.usualType);
|
if (type == Types.ASCII_STRING && prop.usualType == Types.UNICODE_STRING ||
|
||||||
going = false;
|
type == Types.UNICODE_STRING && prop.usualType == Types.ASCII_STRING) {
|
||||||
break;
|
// 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
|
// Work out how long the "data" is
|
||||||
|
Loading…
Reference in New Issue
Block a user