Michael Heydekamp <[EMAIL PROTECTED]> schrieb am 02.02.06 um 17:08:

>> Mittlerweile glaube ich, daß die bei mir herrschenden
>> "Randbedingungen" Grenzwertigkeit in so ziemlich allen Belangen
>> besitzen ;-))

Nicht Grenzwertig, sondern ungewöhnlich.

> 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.

Ja, und zwar XP_ID, was eben genau eben die Werbesignatur trägt.
Hab ich jetzt direkt mal auf 80 Zeichen aufgebohrt.

> 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).

Jepp, stand praktisch exakt so im Code.
Jetzt wird erst mal geschaut ob mehr als 78 Zeichen drin sind und
wenn ja, nur die ersten 78 Zeichen verwendet und dann CRLF angehängt.

> Das ist solange gut gegangen, wie die XP-Signatur nie länger als 48
> Zeichen war.

Was sie durch diverse Umstände bisher praktisch nicht war.
Und wenn, dann nur in Versionen, die nicht so breit im Einsatz waren wie
die Halloween-Version.

> 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).

Also würde ich ein relativ zeitnahes Recompilat der RC4 vorschlagen.
Und zwar sobald meine Änderungen von Heute sauber getestet sind.

> 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.

Es ist xp6s.inc wo die Werbe-Signatur und die Tearline
gebaut werden. In xp6.pas wird die XP_ID declariert.

> Der Fix wäre:
> a) Sicherstellen, daß keine Signaturen länger als 48 Zeichen erzeugt
>    werden (oder alternativ die Variable vergrößern), und

Also Variable verlängern, da sie sonst immer mal wieder an seine
Längengrenze stossen könnte. Jetzt 80 Zeichen + Absicherung nach
78 Zeichen.

> 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.

Ebenfalls geschehen.
-- 
Mit freundlichen Gruessen,
Martin Wodrich
------------------------------------------------------------------------
FreeXP Entwickler-Mailingliste
Dev-List@freexp.de
http://www.freexp.de/cgi-bin/mailman/listinfo/dev-list

Reply via email to