only treat line breaks and spaces as whitespace for stream content

This commit is contained in:
EliotJones 2025-08-03 18:20:24 -05:00
parent 8ef88bb725
commit f84caa0493

View File

@ -26,11 +26,8 @@ internal static class XrefStreamParser
var offsetCorrection = 0L; var offsetCorrection = 0L;
bytes.Seek(xrefOffset); bytes.Seek(xrefOffset);
if (!scanner.TryReadToken(out NumericToken _) if (!TryReadStreamObjAt(xrefOffset, scanner, out var dictToken)
|| !scanner.TryReadToken(out NumericToken _) || dictToken == null)
|| !scanner.TryReadToken(out OperatorToken opToken)
|| !ReferenceEquals(opToken, OperatorToken.StartObject)
|| !scanner.TryReadToken(out DictionaryToken dictToken))
{ {
log.Debug($"Did not find the stream at {xrefOffset} attempting correction"); log.Debug($"Did not find the stream at {xrefOffset} attempting correction");
var recovered = TryRecoverOffset(fileHeaderOffset, xrefOffset, scanner); var recovered = TryRecoverOffset(fileHeaderOffset, xrefOffset, scanner);
@ -241,12 +238,20 @@ internal static class XrefStreamParser
{ {
} }
var isWhitespaceActive = ReadHelper.IsWhitespace(bytes.CurrentByte); bool IsStreamWhitespace()
{
return bytes.CurrentByte == (byte)' '
|| bytes.CurrentByte == (byte)'\r'
|| bytes.CurrentByte == (byte)'\n';
}
var isWhitespaceActive = IsStreamWhitespace();
do do
{ {
// Normalize whitespace. // Normalize whitespace.
if (ReadHelper.IsWhitespace(bytes.CurrentByte)) if (IsStreamWhitespace())
{ {
buffer.Add((byte)' '); buffer.Add((byte)' ');
@ -271,7 +276,7 @@ internal static class XrefStreamParser
{ {
startMarker = bytes.CurrentOffset; startMarker = bytes.CurrentOffset;
isWhitespaceActive = ReadHelper.IsWhitespace(bytes.CurrentByte); isWhitespaceActive = IsStreamWhitespace();
} }
else if (buffer.EndsWith("endobj ")) else if (buffer.EndsWith("endobj "))
{ {