Skip to content

Commit 9c3a5eb

Browse files
authored
Add missing error checks in getSheetMap to fix panic(#1437)
Unit tests updated
1 parent b39626f commit 9c3a5eb

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

excelize.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,9 @@ func OpenReader(r io.Reader, opts ...Options) (*File, error) {
179179
if f.CalcChain, err = f.calcChainReader(); err != nil {
180180
return f, err
181181
}
182-
f.sheetMap = f.getSheetMap()
182+
if f.sheetMap, err = f.getSheetMap(); err != nil {
183+
return f, err
184+
}
183185
if f.Styles, err = f.stylesReader(); err != nil {
184186
return f, err
185187
}

excelize_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,10 @@ func TestOpenReader(t *testing.T) {
250250
assert.NoError(t, zw.Close())
251251
return buf
252252
}
253-
for _, defaultXMLPath := range []string{defaultXMLPathCalcChain, defaultXMLPathStyles} {
253+
for _, defaultXMLPath := range []string{
254+
defaultXMLPathCalcChain,
255+
defaultXMLPathStyles,
256+
defaultXMLPathWorkbookRels} {
254257
_, err = OpenReader(preset(defaultXMLPath))
255258
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
256259
}

sheet.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -454,10 +454,16 @@ func (f *File) GetSheetList() (list []string) {
454454

455455
// getSheetMap provides a function to get worksheet name and XML file path map
456456
// of the spreadsheet.
457-
func (f *File) getSheetMap() map[string]string {
457+
func (f *File) getSheetMap() (map[string]string, error) {
458458
maps := map[string]string{}
459-
wb, _ := f.workbookReader()
460-
rels, _ := f.relsReader(f.getWorkbookRelsPath())
459+
wb, err := f.workbookReader()
460+
if err != nil {
461+
return nil, err
462+
}
463+
rels, err := f.relsReader(f.getWorkbookRelsPath())
464+
if err != nil {
465+
return nil, err
466+
}
461467
for _, v := range wb.Sheets.Sheet {
462468
for _, rel := range rels.Relationships {
463469
if rel.ID == v.ID {
@@ -471,7 +477,7 @@ func (f *File) getSheetMap() map[string]string {
471477
}
472478
}
473479
}
474-
return maps
480+
return maps, nil
475481
}
476482

477483
// getSheetXMLPath provides a function to get XML file path by given sheet

sheet_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,12 @@ func TestGetSheetMap(t *testing.T) {
378378
}
379379
assert.Equal(t, len(sheetMap), 2)
380380
assert.NoError(t, f.Close())
381+
382+
f = NewFile()
383+
f.WorkBook = nil
384+
f.Pkg.Store(defaultXMLPathWorkbook, MacintoshCyrillicCharset)
385+
_, err = f.getSheetMap()
386+
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
381387
}
382388

383389
func TestSetActiveSheet(t *testing.T) {

0 commit comments

Comments
 (0)