From 881e7df7137d591b9c9c911ff6ca976c3f0df880 Mon Sep 17 00:00:00 2001
From: Evgeniy Berlog <berlog@apache.org>
Date: Sat, 8 Sep 2012 18:35:04 +0000
Subject: [PATCH] fixed bug 53588

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1382339 13f79535-47bb-0310-9956-ffa450edef68
---
 .../MissingRecordAwareHSSFListener.java       |  15 ++++++---------
 .../TestMissingRecordAwareHSSFListener.java   |  18 ++++++++++++++++++
 test-data/spreadsheet/53588.xls               | Bin 0 -> 15360 bytes
 3 files changed, 24 insertions(+), 9 deletions(-)
 create mode 100644 test-data/spreadsheet/53588.xls

diff --git a/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java b/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java
index 7e5007a65..15206bd21 100644
--- a/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java
+++ b/src/java/org/apache/poi/hssf/eventusermodel/MissingRecordAwareHSSFListener.java
@@ -20,15 +20,7 @@ package org.apache.poi.hssf.eventusermodel;
 import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
 import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
 import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingRowDummyRecord;
-import org.apache.poi.hssf.record.BOFRecord;
-import org.apache.poi.hssf.record.CellValueRecordInterface;
-import org.apache.poi.hssf.record.MulBlankRecord;
-import org.apache.poi.hssf.record.MulRKRecord;
-import org.apache.poi.hssf.record.NoteRecord;
-import org.apache.poi.hssf.record.Record;
-import org.apache.poi.hssf.record.RecordFactory;
-import org.apache.poi.hssf.record.RowRecord;
-import org.apache.poi.hssf.record.SharedFormulaRecord;
+import org.apache.poi.hssf.record.*;
 
 /**
  * <p>A HSSFListener which tracks rows and columns, and will
@@ -72,6 +64,11 @@ public final class MissingRecordAwareHSSFListener implements HSSFListener {
 			thisRow = valueRec.getRow();
 			thisColumn = valueRec.getColumn();
 		} else {
+            if (record instanceof StringRecord){
+                //it contains only cashed result of the previous FormulaRecord evaluation
+                childListener.processRecord(record);
+                return;
+            }
 			thisRow = -1;
 			thisColumn = -1;
 
diff --git a/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java b/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java
index e632cbbbb..6a60f9454 100644
--- a/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java
+++ b/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java
@@ -461,4 +461,22 @@ public final class TestMissingRecordAwareHSSFListener extends TestCase {
 		}
 		assertEquals(2, eorCount);
 	}
+
+    public void testStringRecordHandling(){
+        readRecords("53588.xls");
+        Record[] rr = r;
+        int missingCount=0;
+        int lastCount=0;
+        for (int i = 0; i < rr.length; i++) {
+            Record record = rr[i];
+            if (record instanceof MissingCellDummyRecord) {
+                missingCount++;
+            }
+            if (record instanceof LastCellOfRowDummyRecord) {
+                lastCount++;
+            }
+        }
+        assertEquals(1, missingCount);
+        assertEquals(1, lastCount);
+    }
 }
diff --git a/test-data/spreadsheet/53588.xls b/test-data/spreadsheet/53588.xls
new file mode 100644
index 0000000000000000000000000000000000000000..716305b544e43004df4215f435909318cc212352
GIT binary patch
literal 15360
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
Yq*{1s^%DAU>9KEk>+Y*JpRWe~4XckPRR910

literal 0
HcmV?d00001