Nullpointer in LocalOutgoingServerSession

Description

This is an excerpt from LocalOutgoingServerSession#returnErrorToSender(Packet packet):

if (packet instanceof IQ) { IQ reply = new IQ(); reply.setID(packet.getID()); reply.setTo(packet.getFrom()); reply.setFrom(packet.getTo()); reply.setChildElement(((IQ) packet).getChildElement().createCopy()); reply.setError(PacketError.Condition.remote_server_not_found); routingTable.routePacket(reply.getTo(), reply, true); }

There's a discussion thread related to this issue here: http://www.igniterealtime.org/community/thread/30048

This code will throw a NullPointerException if the IQ that is being replied to doesn't have a child element (this is valid for IQ types 'result' and 'error'). It is in any case a violation of RFC-3920 to respond with an 'error' stanza to an 'error' or 'result' stanza.

Something like this should fix the problem. It does no longer notify the sender that a problem occurred though:

if (packet instanceof IQ) { if (((IQ) packet).isResponse()) { Log.warn("XMPP specs forbid us to respond with an IQ error to: " + packet); return; } IQ reply = new IQ(); reply.setID(packet.getID()); reply.setTo(packet.getFrom()); reply.setFrom(packet.getTo()); reply.setChildElement(iq.getChildElement().createCopy()); reply.setError(PacketError.Condition.remote_server_not_found); routingTable.routePacket(reply.getTo(), reply, true); }

Environment

None

Activity

Show:
Fixed

Details

Assignee

Reporter

Components

Fix versions

Priority

Created January 4, 2008 at 5:10 AM
Updated April 26, 2008 at 12:20 AM
Resolved April 26, 2008 at 12:20 AM