Fix for invalid DecodeParms when DecodeParms not set (Flate). Clean up.

This commit is contained in:
Gunnsteinn Hall 2019-03-26 02:09:40 +00:00
parent 1b59259abd
commit c80228651a

View File

@ -181,21 +181,21 @@ func newFlateEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObje
// If decodeParams not provided, see if we can get from the stream.
if decodeParams == nil {
obj := TraceToDirectObject(encDict.Get("DecodeParms"))
if obj != nil {
if arr, isArr := obj.(*PdfObjectArray); isArr {
if arr.Len() != 1 {
common.Log.Debug("Error: DecodeParms array length != 1 (%d)", arr.Len())
return nil, errors.New("range check error")
}
obj = TraceToDirectObject(arr.Get(0))
switch t := obj.(type) {
case *PdfObjectArray:
arr := t
if arr.Len() != 1 {
common.Log.Debug("Error: DecodeParms array length != 1 (%d)", arr.Len())
return nil, errors.New("range check error")
}
dp, isDict := obj.(*PdfObjectDictionary)
if !isDict {
common.Log.Debug("Error: DecodeParms not a dictionary (%T)", obj)
return nil, fmt.Errorf("invalid DecodeParms")
}
decodeParams = dp
obj = TraceToDirectObject(arr.Get(0))
case *PdfObjectDictionary:
decodeParams = t
case *PdfObjectNull, nil:
// No decode params set.
default:
common.Log.Debug("Error: DecodeParms not a dictionary (%T)", obj)
return nil, fmt.Errorf("invalid DecodeParms")
}
}
if decodeParams == nil {
@ -1897,8 +1897,8 @@ func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
EndOfBlock: enc.EndOfBlock,
BlackIs1: enc.BlackIs1,
DamagedRowsBeforeError: enc.DamagedRowsBeforeError,
Rows: enc.Rows,
EncodedByteAlign: enc.EncodedByteAlign,
Rows: enc.Rows,
EncodedByteAlign: enc.EncodedByteAlign,
}
pixels, err := encoder.Decode(encoded)
@ -1968,8 +1968,8 @@ func (enc *CCITTFaxEncoder) EncodeBytes(data []byte) ([]byte, error) {
EndOfBlock: enc.EndOfBlock,
BlackIs1: enc.BlackIs1,
DamagedRowsBeforeError: enc.DamagedRowsBeforeError,
Rows: enc.Rows,
EncodedByteAlign: enc.EncodedByteAlign,
Rows: enc.Rows,
EncodedByteAlign: enc.EncodedByteAlign,
}
return encoder.Encode(pixels), nil