HSSF: Try to handle cases where the length does not match the actual data while cloning, we see this in some documents

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1786431 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2017-03-10 20:13:52 +00:00
parent 781e596858
commit 76174aae82
2 changed files with 8 additions and 8 deletions

View File

@ -177,10 +177,10 @@ public class TestAllFiles {
HANDLERS.put("spreadsheet/test_properties1", new NullFileHandler()); HANDLERS.put("spreadsheet/test_properties1", new NullFileHandler());
} }
private static final Set<String> unmodifiableHashSet(String... a) { private static Set<String> unmodifiableHashSet(String... a) {
return Collections.unmodifiableSet(hashSet(a)); return Collections.unmodifiableSet(hashSet(a));
} }
private static final Set<String> hashSet(String... a) { private static Set<String> hashSet(String... a) {
return new HashSet<String>(Arrays.asList(a)); return new HashSet<String>(Arrays.asList(a));
} }
@ -279,12 +279,10 @@ public class TestAllFiles {
// sheet cloning errors // sheet cloning errors
"spreadsheet/47813.xlsx", "spreadsheet/47813.xlsx",
"spreadsheet/56450.xls", "spreadsheet/56450.xls",
"spreadsheet/57231_MixedGasReport.xls",
"spreadsheet/OddStyleRecord.xls", "spreadsheet/OddStyleRecord.xls",
"spreadsheet/WithChartSheet.xlsx", "spreadsheet/WithChartSheet.xlsx",
"spreadsheet/chart_sheet.xlsx", "spreadsheet/chart_sheet.xlsx",
"spreadsheet/SimpleScatterChart.xlsx", "spreadsheet/SimpleScatterChart.xlsx"
"spreadsheet/ConditionalFormattingSamples.xls"
); );
private static final Set<String> IGNORED = unmodifiableHashSet( private static final Set<String> IGNORED = unmodifiableHashSet(

View File

@ -461,10 +461,12 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord, Cl
rec.futureHeader.setAssociatedRange(futureHeader.getAssociatedRange().copy()); rec.futureHeader.setAssociatedRange(futureHeader.getAssociatedRange().copy());
super.copyTo(rec); super.copyTo(rec);
rec.ext_formatting_length = ext_formatting_length; // use min() to gracefully handle cases where the length-property and the array-lenght do not match
// we saw some such files in circulation
rec.ext_formatting_length = Math.min(ext_formatting_length, ext_formatting_data.length);
rec.ext_formatting_data = new byte[ext_formatting_length]; rec.ext_formatting_data = new byte[ext_formatting_length];
System.arraycopy(ext_formatting_data, 0, rec.ext_formatting_data, 0, ext_formatting_length); System.arraycopy(ext_formatting_data, 0, rec.ext_formatting_data, 0, rec.ext_formatting_length);
rec.formula_scale = formula_scale.copy(); rec.formula_scale = formula_scale.copy();