Skip to content

Commit 5515273

Browse files
committed
Fix #319
1 parent 344367c commit 5515273

File tree

3 files changed

+11
-4
lines changed

3 files changed

+11
-4
lines changed

pkg/pdfcpu/validate/action.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,13 @@ import (
2626
func validateGoToActionDict(xRefTable *pdf.XRefTable, d pdf.Dict, dictName string) error {
2727

2828
// see 12.6.4.2 Go-To Actions
29+
required := REQUIRED
30+
if xRefTable.ValidationMode == pdf.ValidationRelaxed {
31+
required = OPTIONAL
32+
}
2933

3034
// D, required, name, byte string or array
31-
return validateDestinationEntry(xRefTable, d, dictName, "D", REQUIRED, pdf.V10)
35+
return validateDestinationEntry(xRefTable, d, dictName, "D", required, pdf.V10)
3236
}
3337

3438
func validateGoToRActionDict(xRefTable *pdf.XRefTable, d pdf.Dict, dictName string) error {

pkg/pdfcpu/validate/objects.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func validateEntry(xRefTable *pdf.XRefTable, d pdf.Dict, dictName, entryName str
3939
o, found := d.Find(entryName)
4040
if !found || o == nil {
4141
if required {
42-
return nil, errors.Errorf("dict=%s required entry=%s missing.", dictName, entryName)
42+
return nil, errors.Errorf("dict=%s required entry=%s missing (obj#%d).", dictName, entryName, xRefTable.CurObj)
4343
}
4444
return nil, nil
4545
}
@@ -51,13 +51,13 @@ func validateEntry(xRefTable *pdf.XRefTable, d pdf.Dict, dictName, entryName str
5151

5252
if o == nil {
5353
if required {
54-
return nil, errors.Errorf("dict=%s required entry=%s missing.", dictName, entryName)
54+
return nil, errors.Errorf("dict=%s required entry=%s missing (obj#%d).", dictName, entryName, xRefTable.CurObj)
5555
}
5656
return nil, nil
5757
}
5858

5959
// Version check
60-
err = xRefTable.ValidateVersion(fmt.Sprintf("dict=%s entry=%s", dictName, entryName), sinceVersion)
60+
err = xRefTable.ValidateVersion(fmt.Sprintf("dict=%s entry=%s (obj#%d)", dictName, entryName, xRefTable.CurObj), sinceVersion)
6161
if err != nil {
6262
return nil, err
6363
}

pkg/pdfcpu/xreftable.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ type XRefTable struct {
127127

128128
// Validation
129129
CurPage int // current page during validation
130+
CurObj int // current object during validation, the last dereferenced object
130131
ValidationMode int // see Configuration
131132
ValidateLinks bool // check for broken links in LinkAnnotations/URIDicts.
132133
Valid bool // true means successful validated against ISO 32000.
@@ -811,6 +812,8 @@ func (xRefTable *XRefTable) indRefToObject(ir *IndirectRef) (Object, error) {
811812
return nil, nil
812813
}
813814

815+
xRefTable.CurObj = int(ir.ObjectNumber)
816+
814817
// return dereferenced object
815818
return entry.Object, nil
816819
}

0 commit comments

Comments
 (0)