Indy 10 TIdIRC Class Software Component

Informationen über die BSIRC Qualität und beseitigte Fehler
(Information about the BSIRC Quality and removed Bugs)
Antworten
Benutzeravatar
fearcry
Beiträge: 46
Registriert: 26 Jul 2020, 18:23

Indy 10 TIdIRC Class Software Component

Beitrag von fearcry »

Die folgenden aufgelisteten EventHandler Methoden der Indy10 Klasse TIdIRCClient
übertragen einen Pointer auf eine String Liste in der Antworten vom IRC-Server gespeichert
werden:

The following Indy 10 EventHandlers using TStringList Objects to buffering Listings from
an IRC-Server:


TIdIRCServerWelcomeEvent
TIdIRCMOTDEvent
TIdIRCServerTraceEvent
TIdIRCChanBANListEvent
TIdIRCChanEXCListEvent
TIdIRCChanINVListEvent
TIdIRCServerListEvent
TIdIRCNickListEvent
TIdIRCServerUsersEvent
TIdIRCServerStatsEvent
TIdIRCKnownServerNamesEvent
TIdIRCAdminInfoRecvEvent
TIdIRCUserInfoRecvEvent
TIdIRCWhoEvent
TIdIRCWhoIsEvent
TIdIRCWhoWasEvent



Ich habe nun alle verwendeten EventHandler in meinem Code nach dem folgenden Beispiel
geändert:

I did change all my used EventHandlers inside my Code like this for Example:

Code: Alles auswählen


TIdIRCServerStatsEvent(TObject *ASender, TStrings *AStatus) 
{ 
 if(AStatus == NULL)   //<- Prevent your Code to access NULL Pointers
 {
  //do Nothing . . .
 }
 else
 {
  //place your Code here . . .
 }
}

Der Hintergrund dieses Server-Stats Beispieles ist:
Indy10 unterstützt streng die RFC 1459 Regeln für die Server-Antworten (Responses).

Einige moderne Serversysteme senden in den STATS ein 210 Reply was nicht in RFC 1459
angegeben ist (aber in einer anderen modernen RFC dargestellt ist)

Da Indy10 momentan kein 210 Reply aus der Server-Response ausliest löst der EventHandler
ONStatsReceived zwar aus, der Pointer der String Liste ist allerdings Null.

BSIRC hatte in dem OnStatsReceived EventHandler auf AStatus zugegriffen und damit eine
Null-Pointer Exception ausgelöst. [beseitigt in 2.2.4.522]


The Background of this ServerStatsReceive-Example is:
Indy10 support strictly RFC1459 Server-Responses,
some modern IRCD's actually do send a 210 Reply in this case,
Indy10 internally not parsing a 210 Reply out yet, so the EventHandler triggers with no AStatus (NULL)
BSIRC did run into a Null Pointer Exception by accessing AStatus inside the EventHandler.
BSIRC did not checked Code for NULL-Pointers. [fixed in 2.2.4.522]

Thanks to the Atozed Indy Forums for helping:

https://www.atozed.com/forums/thread-18 ... -6409.html


cheers

fearcry
Bild

Antworten