Skip to content

Commit

Permalink
workbook: add check for blank worksheet name
Browse files Browse the repository at this point in the history
Issue #442
  • Loading branch information
jmcnamara committed May 9, 2024
1 parent 5bd28df commit 284b61b
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 0 deletions.
3 changes: 3 additions & 0 deletions include/xlsxwriter/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,9 @@ typedef enum lxw_error {
/** Function parameter validation error. */
LXW_ERROR_PARAMETER_VALIDATION,

/** Worksheet name cannot be blank. */
LXW_ERROR_SHEETNAME_IS_BLANK,

/** Worksheet name exceeds Excel's limit of 31 characters. */
LXW_ERROR_SHEETNAME_LENGTH_EXCEEDED,

Expand Down
3 changes: 3 additions & 0 deletions include/xlsxwriter/workbook.h
Original file line number Diff line number Diff line change
Expand Up @@ -469,6 +469,7 @@ lxw_workbook *workbook_new_opt(const char *filename,
*
* The worksheet name must be a valid Excel worksheet name, i.e:
*
* - The name cannot be blank.
* - The name is less than or equal to 31 UTF-8 characters.
* - The name doesn't contain any of the characters: ` [ ] : * ? / \ `
* - The name doesn't start or end with an apostrophe.
Expand Down Expand Up @@ -511,6 +512,7 @@ lxw_worksheet *workbook_add_worksheet(lxw_workbook *workbook,
*
* The chartsheet name must be a valid Excel worksheet name, i.e.:
*
* - The name cannot be blank.
* - The name is less than or equal to 31 UTF-8 characters.
* - The name doesn't contain any of the characters: ` [ ] : * ? / \ `
* - The name doesn't start or end with an apostrophe.
Expand Down Expand Up @@ -927,6 +929,7 @@ lxw_chartsheet *workbook_get_chartsheet_by_name(lxw_workbook *workbook,
* This function is used to validate a worksheet or chartsheet name according
* to the rules used by Excel:
*
* - The name cannot be blank.
* - The name is less than or equal to 31 UTF-8 characters.
* - The name doesn't contain any of the characters: ` [ ] : * ? / \ `
* - The name doesn't start or end with an apostrophe.
Expand Down
1 change: 1 addition & 0 deletions src/utility.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ char *error_strings[LXW_MAX_ERRNO + 1] = {
"Feature is not currently supported in this configuration.",
"NULL function parameter ignored.",
"Function parameter validation error.",
"Worksheet name cannot be blank.",
"Worksheet name exceeds Excel's limit of 31 characters.",
"Worksheet name cannot contain invalid characters: '[ ] : * ? / \\'",
"Worksheet name cannot start or end with an apostrophe.",
Expand Down
7 changes: 7 additions & 0 deletions src/workbook.c
Original file line number Diff line number Diff line change
Expand Up @@ -2607,6 +2607,13 @@ workbook_unset_default_url_format(lxw_workbook *self)
lxw_error
workbook_validate_sheet_name(lxw_workbook *self, const char *sheetname)
{
if (sheetname == NULL)
return LXW_ERROR_NULL_PARAMETER_IGNORED;

/* Check for blank worksheet name. */
if (strlen(sheetname) == 0)
return LXW_ERROR_SHEETNAME_IS_BLANK;

/* Check the UTF-8 length of the worksheet name. */
if (lxw_utf8_strlen(sheetname) > LXW_SHEETNAME_MAX)
return LXW_ERROR_SHEETNAME_LENGTH_EXCEEDED;
Expand Down
29 changes: 29 additions & 0 deletions test/unit/workbook/test_workbook_validate_worksheet_name.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "../../../include/xlsxwriter/workbook.h"
#include "../../../include/xlsxwriter/shared_strings.h"


/* Test a valid sheet name. */
CTEST(workbook, validate_worksheet_name01) {

Expand Down Expand Up @@ -145,3 +146,31 @@ CTEST(workbook, validate_worksheet_name09) {

lxw_workbook_free(workbook);
}

/* Test for blank sheet name. */
CTEST(workbook, validate_worksheet_name10) {

const char* sheetname = "";

lxw_workbook *workbook = workbook_new(NULL);
lxw_error exp = LXW_ERROR_SHEETNAME_IS_BLANK;
lxw_error got = workbook_validate_sheet_name(workbook, sheetname);

ASSERT_EQUAL(exp, got);

lxw_workbook_free(workbook);
}

/* Test for NULL sheet name. */
CTEST(workbook, validate_worksheet_name11) {

const char* sheetname = NULL;

lxw_workbook *workbook = workbook_new(NULL);
lxw_error exp = LXW_ERROR_NULL_PARAMETER_IGNORED;
lxw_error got = workbook_validate_sheet_name(workbook, sheetname);

ASSERT_EQUAL(exp, got);

lxw_workbook_free(workbook);
}

0 comments on commit 284b61b

Please # to comment.