Skip to content

Commit 40f60a0

Browse files
committed
Fix #74
1 parent e8cee97 commit 40f60a0

File tree

2 files changed

+32
-1
lines changed

2 files changed

+32
-1
lines changed

pkg/pdfcpu/validate/info.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ func validateInfoDictDate(xRefTable *pdf.XRefTable, o pdf.Object) (err error) {
4646

4747
func validateInfoDictTrapped(o pdf.Object, xRefTable *pdf.XRefTable) error {
4848

49+
sinceVersion := pdf.V13
50+
4951
validate := func(s string) bool { return pdf.MemberOf(s, []string{"True", "False", "Unknown"}) }
5052

5153
if xRefTable.ValidationMode == pdf.ValidationRelaxed {
@@ -54,7 +56,14 @@ func validateInfoDictTrapped(o pdf.Object, xRefTable *pdf.XRefTable) error {
5456
}
5557
}
5658

57-
_, err := xRefTable.DereferenceName(o, pdf.V13, validate)
59+
_, err := xRefTable.DereferenceName(o, sinceVersion, validate)
60+
if err == nil {
61+
return nil
62+
}
63+
64+
if xRefTable.ValidationMode == pdf.ValidationRelaxed {
65+
_, err = xRefTable.DereferenceBoolean(o, sinceVersion)
66+
}
5867

5968
return err
6069
}

pkg/pdfcpu/xreftable.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,6 +728,28 @@ func (xRefTable *XRefTable) Dereference(o Object) (Object, error) {
728728
return xRefTable.indRefToObject(&ir)
729729
}
730730

731+
// DereferenceBoolean resolves and validates a boolean object, which may be an indirect reference.
732+
func (xRefTable *XRefTable) DereferenceBoolean(o Object, sinceVersion Version) (*Boolean, error) {
733+
734+
o, err := xRefTable.Dereference(o)
735+
if err != nil || o == nil {
736+
return nil, err
737+
}
738+
739+
b, ok := o.(Boolean)
740+
if !ok {
741+
return nil, errors.Errorf("DereferenceBoolean: wrong type <%v>", o)
742+
}
743+
744+
// Version check
745+
err = xRefTable.ValidateVersion("DereferenceBoolean", sinceVersion)
746+
if err != nil {
747+
return nil, err
748+
}
749+
750+
return &b, nil
751+
}
752+
731753
// DereferenceInteger resolves and validates an integer object, which may be an indirect reference.
732754
func (xRefTable *XRefTable) DereferenceInteger(o Object) (*Integer, error) {
733755

0 commit comments

Comments
 (0)