You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2016/07/17 09:27:08 UTC

svn commit: r1753038 - in /poi/trunk/src: java/org/apache/poi/hssf/model/InternalWorkbook.java testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java

Author: centic
Date: Sun Jul 17 09:27:07 2016
New Revision: 1753038

URL: http://svn.apache.org/viewvc?rev=1753038&view=rev
Log:
Bug 59665: Using HSSFWorkbook#setSheetOrder to move sheets to the end corrupts bspos value in WorkbookRecordList

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java?rev=1753038&r1=1753037&r2=1753038&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/model/InternalWorkbook.java Sun Jul 17 09:27:07 2016
@@ -655,17 +655,18 @@ public final class InternalWorkbook {
      * @param sheetname the name of the sheet to reorder
      * @param pos the position that we want to insert the sheet into (0 based)
      */
-
     public void setSheetOrder(String sheetname, int pos ) {
         int sheetNumber = getSheetIndex(sheetname);
         //remove the sheet that needs to be reordered and place it in the spot we want
         boundsheets.add(pos, boundsheets.remove(sheetNumber));
         
         // also adjust order of Records, calculate the position of the Boundsheets via getBspos()...
-        int pos0 = records.getBspos() - (boundsheets.size() - 1);
+        int initialBspos = records.getBspos();
+        int pos0 = initialBspos - (boundsheets.size() - 1);
         Record removed = records.get(pos0 + sheetNumber);
         records.remove(pos0 + sheetNumber);
 		records.add(pos0 + pos, removed);
+        records.setBspos(initialBspos);
     }
 
     /**

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java?rev=1753038&r1=1753037&r2=1753038&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java Sun Jul 17 09:27:07 2016
@@ -1197,4 +1197,17 @@ public final class TestHSSFWorkbook exte
         wb = new HSSFWorkbook(new FileInputStream(file));
         assertCloseDoesNotModifyFile(filename, wb);
     }
+
+    @Test
+    public void setSheetOrderToEnd() throws Exception {
+        final HSSFWorkbook workbook = new HSSFWorkbook();
+        workbook.createSheet("A");
+        try {
+            for (int i = 0; i < 2 * workbook.getInternalWorkbook().getRecords().size(); i++) {
+                workbook.setSheetOrder("A", 0);
+            }
+        } catch (Exception e) {
+            throw new Exception("Moving a sheet to the end should not throw an exception, but threw ", e);
+        }
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org