Opened at 2014-03-09T13:57:26Z
Last modified at 2014-12-07T05:46:51Z
#1139 new defect
Jabber: account gets disconnected upon reception of invalid unicode character
Reported by: | Owned by: | wilmer | |
---|---|---|---|
Priority: | minor | Milestone: | |
Component: | Jabber | Version: | 3.2.1 |
Keywords: | Cc: | tohwiq@… | |
IRC client+version: | Client-independent | Operating System: | Linux |
OS version/distro: | Raspbian 7 |
Description
If someone in a Jabber chatroom has fun sending invalid unicode characters (U+FDD0..U+FDEF), the account gets disconnected with the following error: "jabber - Error: XML stream error"
As the message will be received again when joining the chatroom, it makes it impossible to join it back before enough messages have been sent by other participants of the chatroom.
This is really annoying, as it allows anyone to kick a bitlbee user out of a chatroom.
I'm not sure if it can only happen in chatroom or even only in Jabber.
Attachments (0)
Change History (2)
comment:1 Changed at 2014-03-09T14:02:23Z by
comment:2 Changed at 2014-12-07T05:46:51Z by
Priority: | normal → minor |
---|
Bitlbee wouldn't let me send invalid utf-8 because it failed the charset check. My prosody test server aborted the connection with "Stream error: not-well-formed" when sending it invalid utf-8.
I just modified the input in jabber_read_callback
instead (break after the read, change one byte of the message body to \xff), and the error is right after it, in the xt_feed
call which calls g_markup_parse_context_parse
, which has docs that say:
The data need not be valid UTF-8; an error will be signaled if it's invalid. The data need not be an entire document; you can feed a document into the parser incrementally, via multiple calls to this function. Typically, as you receive data from a network connection or file, you feed each received chunk of data into this function, aborting the process if an error occurs. Once an error is reported, no further data may be fed to the GMarkupParseContext; all errors are fatal
So according to glib's docs, everything is okay...
Yikes, sounds like a fun issue in the GLib XML parser, and/or your Jabber server being too permissive (shouldn't pass through invalid Unicode either!).
I don't think the GLib XML parser has any way to just pass this data through (and possibly iconv would choke on it later anyway), so BitlBee would have to do manual filtering. :-(