All work

Select view

Select search mode

 
50 of

Ignore unexpected 'subscription' values in Roster Set

Description

RFC 6121 section 2.1.5 defines:

The following rules apply to roster sets: [...] The server MUST ignore any value of the 'subscription' attribute other than "remove"

Openfire currently ignores subscription values that are otherwise valid subscription item values (such as none and both) but it throws an error when a different value (e.g.foobar) is used.

The specification clearly states that any value MUST be ignored, so returning an error is not quite right. Instead, that value should be ignored and the Roster Set should be processed as if it wasn’t there.

Environment

None

Details

Assignee

Reporter

Components

Priority

Created May 1, 2025 at 11:44 AM
Updated May 1, 2025 at 1:11 PM

Activity

Guus der Kinderen May 1, 2025 at 11:45 AM

Reproduction:

12:55:16.44 SENT (1): <iq id='CVQDW-72' type='set'> <query xmlns='jabber:iq:roster'> <item jid='test-target-mtm3m@example.org' subscription='foobar'/> </query> </iq> 12:55:16.86 RECV (1): <iq type="error" id="CVQDW-72" from="smack-inttest-one-t1i2s@example.org" to="smack-inttest-one-t1i2s@example.org/one-t1i2s"> <query xmlns="jabber:iq:roster"> <item jid="test-target-mtm3m@example.org" subscription="foobar"/> </query> <error code="500" type="wait"> <internal-server-error xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/> </error> </iq>
2025.05.01 12:55:16.085 ERROR [socket_c2s-worker-11]: org.jivesoftware.openfire.handler.IQRosterHandler - Internal server error java.lang.IllegalArgumentException: No enum constant org.xmpp.packet.Roster.Subscription.foobar at java.lang.Enum.valueOf(Enum.java:293) ~[?:?] at org.xmpp.packet.Roster$Subscription.valueOf(Roster.java:380) ~[tinder-2.0.0.jar:?] at org.xmpp.packet.Roster.getItems(Roster.java:241) ~[tinder-2.0.0.jar:?] at org.jivesoftware.openfire.handler.IQRosterHandler.manageRoster(IQRosterHandler.java:222) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.handler.IQRosterHandler.handleIQ(IQRosterHandler.java:118) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.handler.IQHandler.process(IQHandler.java:125) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.IQRouter.handle(IQRouter.java:403) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.IQRouter.route(IQRouter.java:106) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.spi.PacketRouterImpl.route(PacketRouterImpl.java:74) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.net.StanzaHandler.processIQ(StanzaHandler.java:392) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.net.ClientStanzaHandler.processIQ(ClientStanzaHandler.java:90) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:334) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.net.StanzaHandler.processStanza(StanzaHandler.java:222) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:114) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.nio.NettyConnectionHandler.channelRead0(NettyConnectionHandler.java:142) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at org.jivesoftware.openfire.nio.NettyConnectionHandler.channelRead0(NettyConnectionHandler.java:50) ~[xmppserver-5.0.0-SNAPSHOT.jar:5.0.0-SNAPSHOT] at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.118.Final.jar:4.1.118.F> at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346) ~[netty-codec-4.1.118.Final.jar:4.1.118.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318) ~[netty-codec-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.118.Final.jar:4.1.118.F> at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:289) ~[netty-handler-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.118.Final.jar:4.1.118.F> at io.netty.handler.traffic.AbstractTrafficShapingHandler.channelRead(AbstractTrafficShapingHandler.java:506) ~[netty-handler-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.118.Final.jar:4.1.118.F> at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1357) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.118.Final.jar:4.1.118> at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:868) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:796) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:732) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:658) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.118.Final.jar:4.1.118.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) ~[netty-common-4.1.118.Final.jar:4.1.118.Final] at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.118.Final.jar:4.1.118.Final] at java.lang.Thread.run(Thread.java:1583) [?:?]

Flag notifications