Skip to content
This repository was archived by the owner on Aug 13, 2025. It is now read-only.

Commit b5282f0

Browse files
authored
Merge pull request #645 from tealeg/fix-issue-644
Check currentRow is set on sheet before persisting it (#644)
2 parents 6287849 + 84eaa90 commit b5282f0

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

file.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -441,10 +441,12 @@ func (f *File) MarshallParts(zipWriter *zip.Writer) error {
441441
return wrap(err)
442442
}
443443
for _, sheet := range f.Sheets {
444-
// Make sure we don't lose the current state!
445-
err := sheet.cellStore.WriteRow(sheet.currentRow)
446-
if err != nil {
447-
return wrap(err)
444+
if sheet.currentRow != nil {
445+
// Make sure we don't lose the current state!
446+
err := sheet.cellStore.WriteRow(sheet.currentRow)
447+
if err != nil {
448+
return wrap(err)
449+
}
448450
}
449451

450452
xSheetRels := sheet.makeXLSXSheetRelations()

write_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,33 @@ func TestBigWrite(t *testing.T) {
311311
c.Assert(err, qt.Equals, nil)
312312

313313
}
314+
315+
316+
func TestWriteFileWithUnvisitedSheets(t *testing.T) {
317+
c := qt.New(t)
318+
319+
// Issue 644 occured because we were checking the currentRow
320+
// on sheets that hadn't been visitied and thus had no current
321+
// row set.
322+
csRunO(c, "Test for panic", func(c *qt.C, opt FileOption) {
323+
fileToOpen := filepath.Join("testdocs", "testfile.xlsx")
324+
// open an existing file
325+
wbFile, err := OpenFile(fileToOpen, opt)
326+
c.Assert(err, qt.IsNil)
327+
328+
sheetName := "Tabelle1"
329+
sh, ok := wbFile.Sheet[sheetName]
330+
c.Assert(ok, qt.Equals, true)
331+
colNum, rowNum, _ := GetCoordsFromCellIDString("DD3000")
332+
cell, err := sh.Cell(rowNum, colNum)
333+
c.Assert(err, qt.IsNil)
334+
cell.SetInt64(39491)
335+
336+
testDir := c.Mkdir()
337+
path := filepath.Join(testDir, "test.xlsx")
338+
339+
// With issue 644 this line would panic
340+
err = wbFile.Save(path)
341+
c.Assert(err, qt.IsNil)
342+
})
343+
}

0 commit comments

Comments
 (0)