From b2bb6d983607309417c068b6f38448b7b1bf8c63 Mon Sep 17 00:00:00 2001 From: Gunnsteinn Hall Date: Sat, 22 Jul 2017 16:44:42 +0000 Subject: [PATCH] Fixed problem found by fuzzing when Encrypt pointing to invalid reference --- pdf/core/fuzz_test.go | 19 +++++++++++++++++++ pdf/core/parser.go | 9 ++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/pdf/core/fuzz_test.go b/pdf/core/fuzz_test.go index a9c03aeb..66eea059 100644 --- a/pdf/core/fuzz_test.go +++ b/pdf/core/fuzz_test.go @@ -104,3 +104,22 @@ endstream t.Errorf("Should fail with an error") } } + +// Problem where: +// +func TestFuzzIsEncryptedFail1(t *testing.T) { + parser := PdfParser{} + parser.rs, parser.reader = makeReaderForText(" /Name") + + ref := &PdfObjectReference{ObjectNumber: -1} + + parser.trailer = MakeDict() + parser.trailer.Set("Encrypt", ref) + + _, err := parser.IsEncrypted() + if err == nil { + t.Errorf("err == nil: %v. Should fail.", err) + return + } + +} diff --git a/pdf/core/parser.go b/pdf/core/parser.go index b96aace4..da63dffc 100644 --- a/pdf/core/parser.go +++ b/pdf/core/parser.go @@ -1487,7 +1487,14 @@ func (this *PdfParser) IsEncrypted() (bool, error) { if err != nil { return false, err } - encDict, ok := encObj.(*PdfIndirectObject).PdfObject.(*PdfObjectDictionary) + + encIndObj, ok := encObj.(*PdfIndirectObject) + if !ok { + common.Log.Debug("Encryption object not an indirect object") + return false, errors.New("Type check error") + } + encDict, ok := encIndObj.PdfObject.(*PdfObjectDictionary) + common.Log.Trace("2: %q", encDict) if !ok { return false, errors.New("Trailer Encrypt object non dictionary")