Einzelnen Beitrag anzeigen

Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#30

AW: ChatGPT - Wow! (Cron-Job)

  Alt 10. Jul 2024, 10:28
Klar, die if-Schleife () liefert immer False, und somit ist der Test auf "Sanity" immer True.
Außerdem kann Length(SegmentTable) * High(Byte) aka High(PageSegments) * High(Byte) sowieso niemals größer als MAX_PAGE_SIZE sein.
255*255 = 64.770 < 65.307
Eben, das ist der Punkt. So, wie PageSize berechnet wird, kann der maximale Wert nicht überschritten werden. Falls da Mist drin steht, springt das folgende Seek irgendwohin, aber nicht zum nächsten PageHeader, und die Funktion bricht ab.
Interessant ist allenfalls noch der Randfall, wenn die PageSize = 0 ist. Der Fall kann durchaus auftreten, denn manchmal braucht man in diesem Containerformat tatsächlich explizit eine Segmentgröße von 0 in der SegmentTable. Hängt damit zusammen, dass eine Segmentgröße kleiner $ff das Ende eines "Packets" angibt. Wenn die Packetgröße ein Vielfaches von 256 ist, braucht man da als "Trenner" eine Segmentgröße von 0. Und falls ein solches Packet die Seite komplett füllt, muss das auf der folgenden Seite abgeschlossen werden.

Auf den Wert kommt man per 255*256 + 27(=HeaderSize). Ob das sinnvoll ist, sei mal dahingestellt. Aber das führt zu weit weg vom Thema ChatGPT.
Edit: Doch, ist sinnvoll. Das ist SizeOf(TOggPageHeader) + High(PageSegments) + High(PageSegments) * High(Byte)
The angels have the phone box.

Geändert von Gausi (10. Jul 2024 um 10:41 Uhr)
  Mit Zitat antworten Zitat