Skip to content

Commit ac564af

Browse files
committed
Remove internal error log print, throw XML deserialize error
1 parent bd5dd17 commit ac564af

31 files changed

+458
-203
lines changed

calcchain.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ func (f *File) deleteCalcChain(index int, cell string) error {
5454
if len(calc.C) == 0 {
5555
f.CalcChain = nil
5656
f.Pkg.Delete(defaultXMLPathCalcChain)
57-
content := f.contentTypesReader()
57+
content, err := f.contentTypesReader()
58+
if err != nil {
59+
return err
60+
}
5861
content.Lock()
5962
defer content.Unlock()
6063
for k, v := range content.Overrides {

calcchain_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,14 @@ func TestDeleteCalcChain(t *testing.T) {
3333

3434
formulaType, ref := STCellFormulaTypeShared, "C1:C5"
3535
assert.NoError(t, f.SetCellFormula("Sheet1", "C1", "=A1+B1", FormulaOpts{Ref: &ref, Type: &formulaType}))
36+
37+
// Test delete calculation chain with unsupported charset calculation chain.
3638
f.CalcChain = nil
3739
f.Pkg.Store(defaultXMLPathCalcChain, MacintoshCyrillicCharset)
3840
assert.EqualError(t, f.SetCellValue("Sheet1", "C1", true), "XML syntax error on line 1: invalid UTF-8")
41+
42+
// Test delete calculation chain with unsupported charset content types.
43+
f.ContentTypes = nil
44+
f.Pkg.Store(defaultXMLPathContentTypes, MacintoshCyrillicCharset)
45+
assert.EqualError(t, f.deleteCalcChain(1, "A1"), "XML syntax error on line 1: invalid UTF-8")
3946
}

cell.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -241,11 +241,14 @@ func (f *File) setCellTimeFunc(sheet, cell string, value time.Time) error {
241241
ws.Lock()
242242
c.S = f.prepareCellStyle(ws, col, row, c.S)
243243
ws.Unlock()
244-
date1904, wb := false, f.workbookReader()
244+
var date1904, isNum bool
245+
wb, err := f.workbookReader()
246+
if err != nil {
247+
return err
248+
}
245249
if wb != nil && wb.WorkbookPr != nil {
246250
date1904 = wb.WorkbookPr.Date1904
247251
}
248-
var isNum bool
249252
if isNum, err = c.setCellTime(value, date1904); err != nil {
250253
return err
251254
}
@@ -1320,7 +1323,11 @@ func (f *File) formattedValue(s int, v string, raw bool) (string, error) {
13201323
if styleSheet.CellXfs.Xf[s].NumFmtID != nil {
13211324
numFmtID = *styleSheet.CellXfs.Xf[s].NumFmtID
13221325
}
1323-
date1904, wb := false, f.workbookReader()
1326+
date1904 := false
1327+
wb, err := f.workbookReader()
1328+
if err != nil {
1329+
return v, err
1330+
}
13241331
if wb != nil && wb.WorkbookPr != nil {
13251332
date1904 = wb.WorkbookPr.Date1904
13261333
}

cell_test.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ func TestSetCellValue(t *testing.T) {
173173
f := NewFile()
174174
assert.EqualError(t, f.SetCellValue("Sheet1", "A", time.Now().UTC()), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
175175
assert.EqualError(t, f.SetCellValue("Sheet1", "A", time.Duration(1e13)), newCellNameToCoordinatesError("A", newInvalidCellNameError("A")).Error())
176-
// Test set cell value with column and row style inherit
176+
// Test set cell value with column and row style inherit.
177177
style1, err := f.NewStyle(&Style{NumFmt: 2})
178178
assert.NoError(t, err)
179179
style2, err := f.NewStyle(&Style{NumFmt: 9})
@@ -189,10 +189,14 @@ func TestSetCellValue(t *testing.T) {
189189
assert.NoError(t, err)
190190
assert.Equal(t, "0.50", B2)
191191

192-
// Test set cell value with unsupported charset shared strings table
192+
// Test set cell value with unsupported charset shared strings table.
193193
f.SharedStrings = nil
194194
f.Pkg.Store(defaultXMLPathSharedStrings, MacintoshCyrillicCharset)
195195
assert.EqualError(t, f.SetCellValue("Sheet1", "A1", "A1"), "XML syntax error on line 1: invalid UTF-8")
196+
// Test set cell value with unsupported charset workbook.
197+
f.WorkBook = nil
198+
f.Pkg.Store(defaultXMLPathWorkbook, MacintoshCyrillicCharset)
199+
assert.EqualError(t, f.SetCellValue("Sheet1", "A1", time.Now().UTC()), "XML syntax error on line 1: invalid UTF-8")
196200
}
197201

198202
func TestSetCellValues(t *testing.T) {
@@ -204,7 +208,7 @@ func TestSetCellValues(t *testing.T) {
204208
assert.NoError(t, err)
205209
assert.Equal(t, v, "12/31/10 00:00")
206210

207-
// Test date value lower than min date supported by Excel
211+
// Test date value lower than min date supported by Excel.
208212
err = f.SetCellValue("Sheet1", "A1", time.Date(1600, time.December, 31, 0, 0, 0, 0, time.UTC))
209213
assert.NoError(t, err)
210214

@@ -782,6 +786,12 @@ func TestFormattedValue(t *testing.T) {
782786
assert.Equal(t, "0_0", fn("0_0", "", false))
783787
}
784788

789+
// Test format value with unsupported charset workbook.
790+
f.WorkBook = nil
791+
f.Pkg.Store(defaultXMLPathWorkbook, MacintoshCyrillicCharset)
792+
_, err = f.formattedValue(1, "43528", false)
793+
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
794+
785795
// Test format value with unsupported charset style sheet.
786796
f.Styles = nil
787797
f.Pkg.Store(defaultXMLPathStyles, MacintoshCyrillicCharset)

chart.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -927,8 +927,10 @@ func (f *File) AddChart(sheet, cell, opts string, combo ...string) error {
927927
return err
928928
}
929929
f.addChart(options, comboCharts)
930-
f.addContentTypePart(chartID, "chart")
931-
f.addContentTypePart(drawingID, "drawings")
930+
if err = f.addContentTypePart(chartID, "chart"); err != nil {
931+
return err
932+
}
933+
_ = f.addContentTypePart(drawingID, "drawings")
932934
f.addSheetNameSpace(sheet, SourceRelationship)
933935
return err
934936
}
@@ -952,7 +954,7 @@ func (f *File) AddChartSheet(sheet, opts string, combo ...string) error {
952954
},
953955
}
954956
f.SheetCount++
955-
wb := f.workbookReader()
957+
wb, _ := f.workbookReader()
956958
sheetID := 0
957959
for _, v := range wb.Sheets.Sheet {
958960
if v.SheetID > sheetID {
@@ -969,11 +971,15 @@ func (f *File) AddChartSheet(sheet, opts string, combo ...string) error {
969971
f.prepareChartSheetDrawing(&cs, drawingID, sheet)
970972
drawingRels := "xl/drawings/_rels/drawing" + strconv.Itoa(drawingID) + ".xml.rels"
971973
drawingRID := f.addRels(drawingRels, SourceRelationshipChart, "../charts/chart"+strconv.Itoa(chartID)+".xml", "")
972-
f.addSheetDrawingChart(drawingXML, drawingRID, &options.Format)
974+
if err = f.addSheetDrawingChart(drawingXML, drawingRID, &options.Format); err != nil {
975+
return err
976+
}
973977
f.addChart(options, comboCharts)
974-
f.addContentTypePart(chartID, "chart")
975-
f.addContentTypePart(sheetID, "chartsheet")
976-
f.addContentTypePart(drawingID, "drawings")
978+
if err = f.addContentTypePart(chartID, "chart"); err != nil {
979+
return err
980+
}
981+
_ = f.addContentTypePart(sheetID, "chartsheet")
982+
_ = f.addContentTypePart(drawingID, "drawings")
977983
// Update workbook.xml.rels
978984
rID := f.addRels(f.getWorkbookRelsPath(), SourceRelationshipChartsheet, fmt.Sprintf("/xl/chartsheets/sheet%d.xml", sheetID), "")
979985
// Update workbook.xml

chart_test.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ func TestAddChart(t *testing.T) {
226226
// Test add combo chart with unsupported chart type
227227
assert.EqualError(t, f.AddChart("Sheet2", "BD64", `{"type":"barOfPie","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$A$30:$D$37","values":"Sheet1!$B$30:$B$37"}],"format":{"x_scale":1.0,"y_scale":1.0,"x_offset":15,"y_offset":10,"print_obj":true,"lock_aspect_ratio":false,"locked":false},"legend":{"position":"left","show_legend_key":false},"title":{"name":"Bar of Pie Chart"},"plotarea":{"show_bubble_size":true,"show_cat_name":false,"show_leader_lines":false,"show_percent":true,"show_series_name":true,"show_val":true},"show_blanks_as":"zero","x_axis":{"major_grid_lines":true},"y_axis":{"major_grid_lines":true}}`, `{"type":"unknown","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$A$30:$D$37","values":"Sheet1!$B$30:$B$37"}],"format":{"x_scale":1.0,"y_scale":1.0,"x_offset":15,"y_offset":10,"print_obj":true,"lock_aspect_ratio":false,"locked":false},"legend":{"position":"left","show_legend_key":false},"title":{"name":"Bar of Pie Chart"},"plotarea":{"show_bubble_size":true,"show_cat_name":false,"show_leader_lines":false,"show_percent":true,"show_series_name":true,"show_val":true},"show_blanks_as":"zero","x_axis":{"major_grid_lines":true},"y_axis":{"major_grid_lines":true}}`), "unsupported chart type unknown")
228228
assert.NoError(t, f.Close())
229+
230+
// Test add chart with unsupported charset content types.
231+
f.ContentTypes = nil
232+
f.Pkg.Store(defaultXMLPathContentTypes, MacintoshCyrillicCharset)
233+
assert.EqualError(t, f.AddChart("Sheet1", "P1", `{"type":"col","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$30:$D$30"}],"title":{"name":"2D Column Chart"}}`), "XML syntax error on line 1: invalid UTF-8")
229234
}
230235

231236
func TestAddChartSheet(t *testing.T) {
@@ -259,6 +264,14 @@ func TestAddChartSheet(t *testing.T) {
259264
assert.NoError(t, f.UpdateLinkedValue())
260265

261266
assert.NoError(t, f.SaveAs(filepath.Join("test", "TestAddChartSheet.xlsx")))
267+
// Test add chart sheet with unsupported charset drawing XML.
268+
f.Pkg.Store("xl/drawings/drawing4.xml", MacintoshCyrillicCharset)
269+
assert.EqualError(t, f.AddChartSheet("Chart3", `{"type":"col","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$30:$D$30"}],"title":{"name":"2D Column Chart"}}`), "XML syntax error on line 1: invalid UTF-8")
270+
// Test add chart sheet with unsupported charset content types.
271+
f = NewFile()
272+
f.ContentTypes = nil
273+
f.Pkg.Store(defaultXMLPathContentTypes, MacintoshCyrillicCharset)
274+
assert.EqualError(t, f.AddChartSheet("Chart4", `{"type":"col","series":[{"name":"Sheet1!$A$30","categories":"Sheet1!$B$29:$D$29","values":"Sheet1!$B$30:$D$30"}],"title":{"name":"2D Column Chart"}}`), "XML syntax error on line 1: invalid UTF-8")
262275
}
263276

264277
func TestDeleteChart(t *testing.T) {

comment.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ func (f *File) GetComments() (map[string][]Comment, error) {
6969
// getSheetComments provides the method to get the target comment reference by
7070
// given worksheet file path.
7171
func (f *File) getSheetComments(sheetFile string) string {
72-
rels := "xl/worksheets/_rels/" + sheetFile + ".rels"
73-
if sheetRels := f.relsReader(rels); sheetRels != nil {
72+
rels, _ := f.relsReader("xl/worksheets/_rels/" + sheetFile + ".rels")
73+
if sheetRels := rels; sheetRels != nil {
7474
sheetRels.Lock()
7575
defer sheetRels.Unlock()
7676
for _, v := range sheetRels.Relationships {
@@ -135,8 +135,7 @@ func (f *File) AddComment(sheet string, comment Comment) error {
135135
if err = f.addComment(commentsXML, comment); err != nil {
136136
return err
137137
}
138-
f.addContentTypePart(commentID, "comments")
139-
return err
138+
return f.addContentTypePart(commentID, "comments")
140139
}
141140

142141
// DeleteComment provides the method to delete comment in a sheet by given

comment_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ func TestDecodeVMLDrawingReader(t *testing.T) {
112112
f := NewFile()
113113
path := "xl/drawings/vmlDrawing1.xml"
114114
f.Pkg.Store(path, MacintoshCyrillicCharset)
115-
f.decodeVMLDrawingReader(path)
115+
_, err := f.decodeVMLDrawingReader(path)
116+
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
116117
}
117118

118119
func TestCommentsReader(t *testing.T) {

excelize.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,10 @@ func OpenReader(r io.Reader, opts ...Options) (*File, error) {
181181
return f, err
182182
}
183183
f.sheetMap = f.getSheetMap()
184-
f.Styles, err = f.stylesReader()
185-
f.Theme = f.themeReader()
184+
if f.Styles, err = f.stylesReader(); err != nil {
185+
return f, err
186+
}
187+
f.Theme, err = f.themeReader()
186188
return f, err
187189
}
188190

@@ -335,7 +337,7 @@ func checkSheetR0(ws *xlsxWorksheet, sheetData *xlsxSheetData, r0 *xlsxRow) {
335337
// setRels provides a function to set relationships by given relationship ID,
336338
// XML path, relationship type, target and target mode.
337339
func (f *File) setRels(rID, relPath, relType, target, targetMode string) int {
338-
rels := f.relsReader(relPath)
340+
rels, _ := f.relsReader(relPath)
339341
if rels == nil || rID == "" {
340342
return f.addRels(relPath, relType, target, targetMode)
341343
}
@@ -360,7 +362,7 @@ func (f *File) addRels(relPath, relType, target, targetMode string) int {
360362
uniqPart := map[string]string{
361363
SourceRelationshipSharedStrings: "/xl/sharedStrings.xml",
362364
}
363-
rels := f.relsReader(relPath)
365+
rels, _ := f.relsReader(relPath)
364366
if rels == nil {
365367
rels = &xlsxRelationships{}
366368
}
@@ -418,7 +420,10 @@ func (f *File) addRels(relPath, relType, target, targetMode string) int {
418420
// </c>
419421
// </row>
420422
func (f *File) UpdateLinkedValue() error {
421-
wb := f.workbookReader()
423+
wb, err := f.workbookReader()
424+
if err != nil {
425+
return err
426+
}
422427
// recalculate formulas
423428
wb.CalcPr = nil
424429
for _, name := range f.GetSheetList() {
@@ -465,12 +470,15 @@ func (f *File) AddVBAProject(bin string) error {
465470
if path.Ext(bin) != ".bin" {
466471
return ErrAddVBAProject
467472
}
468-
wb := f.relsReader(f.getWorkbookRelsPath())
469-
wb.Lock()
470-
defer wb.Unlock()
473+
rels, err := f.relsReader(f.getWorkbookRelsPath())
474+
if err != nil {
475+
return err
476+
}
477+
rels.Lock()
478+
defer rels.Unlock()
471479
var rID int
472480
var ok bool
473-
for _, rel := range wb.Relationships {
481+
for _, rel := range rels.Relationships {
474482
if rel.Target == "vbaProject.bin" && rel.Type == SourceRelationshipVBAProject {
475483
ok = true
476484
continue
@@ -482,7 +490,7 @@ func (f *File) AddVBAProject(bin string) error {
482490
}
483491
rID++
484492
if !ok {
485-
wb.Relationships = append(wb.Relationships, xlsxRelationship{
493+
rels.Relationships = append(rels.Relationships, xlsxRelationship{
486494
ID: "rId" + strconv.Itoa(rID),
487495
Target: "vbaProject.bin",
488496
Type: SourceRelationshipVBAProject,
@@ -495,9 +503,12 @@ func (f *File) AddVBAProject(bin string) error {
495503

496504
// setContentTypePartProjectExtensions provides a function to set the content
497505
// type for relationship parts and the main document part.
498-
func (f *File) setContentTypePartProjectExtensions(contentType string) {
506+
func (f *File) setContentTypePartProjectExtensions(contentType string) error {
499507
var ok bool
500-
content := f.contentTypesReader()
508+
content, err := f.contentTypesReader()
509+
if err != nil {
510+
return err
511+
}
501512
content.Lock()
502513
defer content.Unlock()
503514
for _, v := range content.Defaults {
@@ -516,4 +527,5 @@ func (f *File) setContentTypePartProjectExtensions(contentType string) {
516527
ContentType: ContentTypeVBA,
517528
})
518529
}
530+
return err
519531
}

0 commit comments

Comments
 (0)