Fixed problem found by fuzzing when Encrypt pointing to invalid reference

This commit is contained in:
Gunnsteinn Hall 2017-07-22 16:44:42 +00:00
parent 6e30b10029
commit b2bb6d9836
2 changed files with 27 additions and 1 deletions

View File

@ -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
}
}

View File

@ -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")