[prev in list] [next in list] [prev in thread] [next in thread] 

List:       licq-devel
Subject:    [Licq-devel] Re: on double recoding ("translation") of messages sent through server
From:       Andriy Gapon <agaponrmthis () optonline ! net>
Date:       2003-09-11 6:30:23
[Download RAW message or body]


I would like to remind the developers of this obvious bug, it doesn't seem to 
be fixed in cvs version yet.

Just in case I have failed to explain clearly why this is a bug and "obvious" 
one on the previous occasion, here I go again.

In terms of 1.2.7 release code:
in file icqd-srv.cpp, despite the comment at line 2088:

> //I must admit, any server that does anything like this is a pile of shit

apparently that type of shit does happen, I mean ICQ_SNACxMSG_SERVERxMESSAGE, 
mFormat==2 case. I receive this sort of messages-through-server from my friend 
using ICQLite.
Then, at line 2148 message contained in szMsg variable is explicitely recoded:

> gTranslator.ServerToClient(szMsg);

Then, at line 2177 this recoded message is passed to ProcessMessage():
> ProcessMessage(u, advMsg, szMsg, nMsgType, nMask, nMsgID,
>                      nSequence, bIsAck, bNewUser);

This method is defined in icqd.cpp at line 1966:
> void CICQDaemon::ProcessMessage(ICQUser *u, CBuffer &packet, char *message,
>                                 unsigned short nMsgType, unsigned long nMask,
>                                 unsigned long nMsgID[2],
>                                 unsigned long nSequence, bool bIsAck,
>                                 bool &bNewUser)

For the messages I have problem with ICQ_CMDxSUB_MSG case is entered and at 
line 2020 a message event is created:
> CEventMsg *e = CEventMsg::Parse(message, ICQ_CMDxRCV_SYSxMSGxONLINE,
>                                     TIME_NOW, nFlags);

note that the message variable is the same as szMsg above.

Finally, message.cpp line 182:
> CEventMsg *CEventMsg::Parse(char *sz, unsigned short nCmd, time_t nTime, unsigned long nFlags)
> {
>   gTranslator.ServerToClient (sz);
>   return new CEventMsg(sz, nCmd, nTime, nFlags);
> } 

Voila, the message is recoded for the second time and that's what newly 
created event will have. The code in question doesn't seem to be changed much 
in the cvs version, just displaced a little.
 From the comment in the code mentioned in the beginning I understand that the 
described code path should not be very common. However, I hope that the 
unlucky like me will not be left without attention.
Again, this problem or a problem very similar to this was reported as bug 
761022, and bugs 765938 and 660370 appear to be its duplicates.

-- 
Andriy Gapon



-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
Licq-devel mailing list
Licq-devel@licq.org
https://lists.sourceforge.net/lists/listinfo/licq-devel
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic