From 6ae90db69a467c438d6ca14dbc0522a1aa3d71af Mon Sep 17 00:00:00 2001 From: Horst Rutter Date: Wed, 31 Jan 2024 19:14:21 +0100 Subject: [PATCH] Fix #772 --- pkg/pdfcpu/validate/font.go | 13 ++++++++++--- pkg/pdfcpu/validate/page.go | 8 ++++++-- pkg/pdfcpu/validate/xReftable.go | 11 +++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/pkg/pdfcpu/validate/font.go b/pkg/pdfcpu/validate/font.go index 70f68555..87de3556 100644 --- a/pkg/pdfcpu/validate/font.go +++ b/pkg/pdfcpu/validate/font.go @@ -135,11 +135,18 @@ func validateFontDescriptorPart1(xRefTable *model.XRefTable, d types.Dict, dictN return err } - _, err = validateNameEntry(xRefTable, d, dictName, "FontName", REQUIRED, model.V10, nil) + required := true + if xRefTable.ValidationMode == model.ValidationRelaxed { + required = false + } + _, err = validateNameEntry(xRefTable, d, dictName, "FontName", required, model.V10, nil) if err != nil { - _, err = validateStringEntry(xRefTable, d, dictName, "FontName", REQUIRED, model.V10, nil) + _, err = validateStringEntry(xRefTable, d, dictName, "FontName", required, model.V10, nil) if err != nil { - return err + if xRefTable.ValidationMode != model.ValidationRelaxed { + return err + } + reportSpecViolation(xRefTable, err) } } diff --git a/pkg/pdfcpu/validate/page.go b/pkg/pdfcpu/validate/page.go index edb6460c..5aa41caf 100644 --- a/pkg/pdfcpu/validate/page.go +++ b/pkg/pdfcpu/validate/page.go @@ -102,8 +102,12 @@ func validatePageContents(xRefTable *model.XRefTable, d types.Dict) (hasContents } - if xRefTable.ValidationMode != model.ValidationRelaxed { - return false, errors.Errorf("validatePageContents: empty page content array detected") + if !hasContents { + err := errors.Errorf("validatePageContents: empty page content array detected") + if xRefTable.ValidationMode == model.ValidationStrict { + return false, err + } + reportSpecViolation(xRefTable, err) } default: diff --git a/pkg/pdfcpu/validate/xReftable.go b/pkg/pdfcpu/validate/xReftable.go index cf1d6c86..b171c8b9 100644 --- a/pkg/pdfcpu/validate/xReftable.go +++ b/pkg/pdfcpu/validate/xReftable.go @@ -31,6 +31,17 @@ import ( "github.com/pkg/errors" ) +func reportSpecViolation(xRefTable *model.XRefTable, err error) { + // TODO Apply across code base. + pre := fmt.Sprintf("digesting spec violation around obj#(%d)", xRefTable.CurObj) + if log.ValidateEnabled() { + log.CLI.Printf("%s: %v\n", pre, err) + } + if log.CLIEnabled() { + log.Validate.Printf("%s: %v\n", pre, err) + } +} + // XRefTable validates a PDF cross reference table obeying the validation mode. func XRefTable(xRefTable *model.XRefTable) error { if log.InfoEnabled() {