]> source.dussan.org Git - poi.git/commitdiff
HSSF: Try to handle cases where the length does not match the actual data while cloni...
authorDominik Stadler <centic@apache.org>
Fri, 10 Mar 2017 20:13:52 +0000 (20:13 +0000)
committerDominik Stadler <centic@apache.org>
Fri, 10 Mar 2017 20:13:52 +0000 (20:13 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1786431 13f79535-47bb-0310-9956-ffa450edef68

src/integrationtest/org/apache/poi/TestAllFiles.java
src/java/org/apache/poi/hssf/record/CFRule12Record.java

index af30e69efd8f9fa89fa8e313e673df3b3d0633ae..9ebe79d76851e014f65e581aa76a8ada50f2df16 100644 (file)
@@ -177,10 +177,10 @@ public class TestAllFiles {
         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));
     }
-    private static final Set<String> hashSet(String... a) {
+    private static Set<String> hashSet(String... a) {
         return new HashSet<String>(Arrays.asList(a));
     }
 
@@ -279,12 +279,10 @@ public class TestAllFiles {
         // sheet cloning errors
         "spreadsheet/47813.xlsx",
         "spreadsheet/56450.xls",
-        "spreadsheet/57231_MixedGasReport.xls",
         "spreadsheet/OddStyleRecord.xls",
         "spreadsheet/WithChartSheet.xlsx",
         "spreadsheet/chart_sheet.xlsx",
-        "spreadsheet/SimpleScatterChart.xlsx",
-        "spreadsheet/ConditionalFormattingSamples.xls"
+        "spreadsheet/SimpleScatterChart.xlsx"
     );
 
     private static final Set<String> IGNORED = unmodifiableHashSet(
index d9d9793e9b20aa90ae2af0122067ae1fc2500612..b10c19a99e1283acdbcf2205535674cb5cae7847 100644 (file)
@@ -461,10 +461,12 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord, Cl
         rec.futureHeader.setAssociatedRange(futureHeader.getAssociatedRange().copy());
         
         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];
-        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();