private void CheckPRStreamLength(PRStream stream) {
int fileLength = tokens.Length;
int start = stream.Offset;
bool calc = false;
int streamLength = 0;
PdfObject obj = GetPdfObjectRelease(stream.Get(PdfName.LENGTH));
if (obj != null && obj.Type == PdfObject.NUMBER) {
streamLength = ((PdfNumber)obj).IntValue;
if (streamLength + start > fileLength - 20)
calc = true;
else {
tokens.Seek(start + streamLength);
String line = tokens.ReadString(20);
if (!line.StartsWith("\nendstream") &&
!line.StartsWith("\r\nendstream") &&
!line.StartsWith("\rendstream") &&
!line.StartsWith("endstream"))
calc = true;
}
}
else
calc = true;
if (calc) {
byte[] tline = new byte[16];
tokens.Seek(start);
while (true) {
int pos = tokens.FilePointer;
if (!tokens.ReadLineSegment(tline))
break;
if (Equalsn(tline, endstream)) {
streamLength = pos - start;
break;
}
if (Equalsn(tline, endobj)) {
tokens.Seek(pos - 16);
String s = tokens.ReadString(16);
int index = s.IndexOf("endstream");
if (index >= 0)
pos = pos - 16 + index;
streamLength = pos - start;
break;
}
}
}
stream.Length = streamLength;
}