From fd2cc4b7d160cda5e4d85efd8f0f7e1164b77d2c Mon Sep 17 00:00:00 2001 From: Avik Sengupta Date: Thu, 9 Oct 2003 19:21:57 +0000 Subject: [PATCH] PR: 13921 Sheet name should not be greater than 31 chars and should not contain \/?*[] git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/branches/REL_2_BRANCH@353385 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/record/BoundSheetRecord.java | 12 +++++++++++ .../poi/hssf/usermodel/HSSFWorkbook.java | 4 +++- .../poi/hssf/record/TestBoundSheetRecord.java | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java b/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java index 6e01246a6..95c587806 100644 --- a/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java +++ b/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java @@ -194,10 +194,22 @@ public class BoundSheetRecord /** * Set the sheetname for this sheet. (this appears in the tabs at the bottom) * @param sheetname the name of the sheet + * @thows IllegalArgumentException if sheet name will cause excel to crash. */ public void setSheetname( String sheetname ) { + + if ((sheetname == null) || (sheetname.length()==0) + || (sheetname.length()>31) + || (sheetname.indexOf("/") > -1) + || (sheetname.indexOf("\\") > -1) + || (sheetname.indexOf("?") > -1) + || (sheetname.indexOf("*") > -1) + || (sheetname.indexOf("]") > -1) + || (sheetname.indexOf("[") > -1) ){ + throw new IllegalArgumentException("Sheet name cannot be blank, greater than 31 chars, or contain any of /\\*?[]"); + } field_5_sheetname = sheetname; } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index 32f4c2c41..058e60c7d 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -281,7 +281,9 @@ public class HSSFWorkbook /** - * set the sheet name. + * set the sheet name. + * Will throw IllegalArgumentException if the name is greater than 31 chars + * or contains /\?*[] * @param sheet number (0 based) * @param sheet name */ diff --git a/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java b/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java index 2058c2f9e..4ca607535 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java +++ b/src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java @@ -92,5 +92,25 @@ public class TestBoundSheetRecord assertEquals(" 2 + 2 + 4 + 2 + 1 + 1 + len(str) * 2", 24, record.getRecordSize()); } + + public void testName() { + BoundSheetRecord record = new BoundSheetRecord(); + record.setSheetname("1234567890223456789032345678904"); + assertTrue("Success", true); + try { + record.setSheetname("12345678902234567890323456789042"); + assertTrue("Should have thrown IllegalArgumentException, but didnt", false); + } catch (IllegalArgumentException e) { + assertTrue("succefully threw exception",true); + } + + try { + record.setSheetname("s//*s"); + assertTrue("Should have thrown IllegalArgumentException, but didnt", false); + } catch (IllegalArgumentException e) { + assertTrue("succefully threw exception",true); + } + + } }