linuxdcpp-team team mailing list archive
-
linuxdcpp-team team
-
Mailing list archive
-
Message #00556
[Bug 541548] [NEW] Bad NMDC validation messes up LinuxDC++ chat formatting
Public bug reported:
Seen at least on one hub out in the wild, which terminated
actions/emotes in chat with \0 instead of proper |. E.g. Hub commands
sent with '+me is going to lose his mind with this' were sent out by hub
as * razzloss is going to his mind with this\0 The ClientListener Status
message fired from this then contained this line and the next commands
send by the hub until valid termination character was found.
Windows clients apparently behaved as everything went fine (since no-one
hadn't bothered to fix the problem and they saw the messages). So I'd
imagine Windows chat messages are strcpy'd at some point, so that they
end at correct place (and won't output the following commands to chat).
LinuxDC++ on the otherhand passes the length of the string from the
fired StatusMessage to gtk_text_buffer_insert, which then spews bunch of
utf8 validation errors to console and doesn't actually add anything to
the chat. After this nick tags are applied by LinuxDC++ so random text
on the previous line gets italicized.
So how do we fix this? At minimum the italicizing should be corrected,
but should some validation be added to dcpp, so that messages like this
won't get up to the GUI level?
Quick fix which will show the emote line correctly is to change the len
parameter passed to gtk_text_buffer_insert to -1, so that it will use
only the null terminated part of the message.
** Affects: dcplusplus
Importance: Undecided
Status: New
** Affects: linuxdcpp
Importance: Medium
Status: Confirmed
** Tags: core gui hub
--
Bad NMDC validation messes up LinuxDC++ chat formatting
https://bugs.launchpad.net/bugs/541548
You received this bug notification because you are a member of LinuxDC++
Team, which is subscribed to LinuxDC++.
Status in DC++: New
Status in Linux DC++: Confirmed
Bug description:
Seen at least on one hub out in the wild, which terminated actions/emotes in chat with \0 instead of proper |. E.g. Hub commands sent with '+me is going to lose his mind with this' were sent out by hub as * razzloss is going to his mind with this\0 The ClientListener Status message fired from this then contained this line and the next commands send by the hub until valid termination character was found.
Windows clients apparently behaved as everything went fine (since no-one hadn't bothered to fix the problem and they saw the messages). So I'd imagine Windows chat messages are strcpy'd at some point, so that they end at correct place (and won't output the following commands to chat).
LinuxDC++ on the otherhand passes the length of the string from the fired StatusMessage to gtk_text_buffer_insert, which then spews bunch of utf8 validation errors to console and doesn't actually add anything to the chat. After this nick tags are applied by LinuxDC++ so random text on the previous line gets italicized.
So how do we fix this? At minimum the italicizing should be corrected, but should some validation be added to dcpp, so that messages like this won't get up to the GUI level?
Quick fix which will show the emote line correctly is to change the len parameter passed to gtk_text_buffer_insert to -1, so that it will use only the null terminated part of the message.
Follow ups
References