Reinhard Irmer <[EMAIL PROTECTED]> wrote on 02.02.06:
> Michael Heydekamp schrieb:
>>> aha und wie soll das gehen?
>> Wie man einen Puffer extrahiert? Mit N/X/N halt und... [...]
> danke, wieder was gelernt ;-)
Jetzt sag bloß, Du hast noch nie eine Nachricht extrahiert...?
>>> naja, dann hat mein Rumgemurkse doch wieder etwas Sinn gemacht ;-)
>> Definitiv. Wundert mich nur, weil ich das bei meiner Version nicht
>> reproduzieren kann. Vielleicht auch deshalb, weil nicht dieselben
>> Ranfbedingungen zutreffen.
> Mittlerweile glaube ich, daß die bei mir herrschenden
> "Randbedingungen" Grenzwertigkeit in so ziemlich allen Belangen
> besitzen ;-))
In diesem Fall liegt es nicht an Dir, sondern an XP. Ohne jetzt in den
Code geschaut zu haben, kann man an dem beobachteten Verhalten die
Ursache des Bugs förmlich "riechen":
Da wird irgendeine Variable für die Signatur auf 50 Zeichen begrenzt
sein. Diese Variable wird mittels einer Stringaddition nach dem Prinzip
bla + blubb + baeh + #13#10
gefüllt (wobei #13#10 für den Zeilentrenner CRLF stehen).
Das ist solange gut gegangen, wie die XP-Signatur nie länger als 48
Zeichen war. Die Signatur ...
----------8<----------
> ## CrossPoint/FreeXP v3.45 alpha 1 (XMS) Kom-R ##
----------8<----------
... ist aber bereits 49 Zeichen lang, so daß von dem anzuhängenden CRLF
nur noch das CR (#13) übrigbleibt, weil das LF (#10) quasi hinten aus
dem String rausfällt. Im Lister wird das dann als "Note" dargestellt.
Bei noch längeren Signaturen (siehe "Halloween") kann noch nicht mal das
CR angehängt werden, und der String wird auf 50 Zeichen gekürzt.
Dadurch kommt es zu einer Nachricht ohne abschließendes CRLF, was
wiederum dazu führt, daß alle nachfolgenden Strings unmittelbar an das
Ende der Signatur angehängt werden (u.a. mit der Folge, daß ein MIME-
Boundary nicht mehr erkannt werden kann oder eine nachfolgende Nachricht
mit der vorherigen zusammengezogen wird). Ich würde das sogar als einen
relativ kapitalen Bug bezeichnen (kleine Ursache, große Wirkung).
Eine der typischen und unzureichend abgesicherten Annahmen in XP, denn
wenn man in xpglobal.pas neue Strings für die Versionsbezeichnung
einträgt und dabei nicht unmittelbar auf die Idee kommt "Moment, da war
doch in sowieso.pas was mit einer auf 50 Zeichen begrenzten Signatur",
dann kommt es zu solchen Folgen.
Der Fix wäre:
a) Sicherstellen, daß keine Signaturen länger als 48 Zeichen erzeugt
werden (oder alternativ die Variable vergrößern), und
b) zusätzlich sicherstellen, daß selbst bei versehentlich längeren
Strings auf jeden Fall ein CRLF angehängt wird (z.B. indem man ein
'truncstr(s,sizeof(variable)-3)' davorschaltet). Das sieht dann bei
gekürzten Strings zwar unschön aus, führt aber wenigstens zu einer
technisch sauberen Nachricht.
Michael
------------------------------------------------------------------------
FreeXP Entwickler-Mailingliste
[email protected]
http://www.freexp.de/cgi-bin/mailman/listinfo/dev-list