View Issue Details

IDProjectCategoryView StatusLast Update
0006630unrealircdpublic2026-06-21 20:03
Reporterprogval Assigned Tosyzop  
PrioritynormalSeverityminorReproducibilityalways
Status acknowledgedResolutionopen 
Summary0006630: CAP LS * reply is sent to non-302 clients
DescriptionThe "CAP LS *" syntax, which allows sending more than one line of capabilities, is an extension of the capability negotiation version 302: https://ircv3.net/specs/extensions/capability-negotiation#cap-ls-version-features

But with recent additions to the list of capabilities (coincidentally "draft/multiline", which is unrelated to multi-line CAP LS), Unreal's response to "CAP LS" that are not "CAP LS 302" no longer fits on a single line, causing Unreal to violate the spec:

The solution to this is to omit some capabilities to clients that don't support version 302. I guess Unreal (or its modules) could hardcode a set of "old" capabilities, as clients not supporting version 302 are unlikely to support recent and complex specs like multiline, chathistory, labeled-response, or metadata.
Steps To ReproduceWith latest commit (UnrealIRCd-6.2.6-rc1):

1782036556.641 bar -> S: CAP LS
1782036556.641 bar -> S: NICK bar
1782036556.641 bar -> S: USER u s e r
1782036556.641 bar -> S: CAP END
1782036556.641 S -> bar: :My.Little.Server CAP * LS * :unrealircd.org/link-security unrealircd.org/plaintext-policy unrealircd.org/history-storage draft/metadata-notify-2 draft/metadata-2 away-notify invite-notify extended-join userhost-in-names multi-prefix cap-notify setname tls chghost account-notify message-tags batch server-time account-tag echo-message labeled-response draft/chathistory extended-monitor standard-replies no-implicit-names draft/no-implicit-names draft/extended-isupport draft/multiline
1782036556.641 S -> bar: :My.Little.Server CAP * LS :unrealircd.org/json-log
3rd party modules

Activities

syzop

2026-06-21 19:49

administrator   ~0023687

Last edited: 2026-06-21 19:51

Have to say my first instinct is like jesus.. CAP 302 is almost 9 years old!!! :D

But, yeah, I will do something along the lines what you suggested, i will take care of it, thanks for the suggestion. Like I can scratch 3 for sure, like the informative ones that are useless without value anyway (so less-than-302)... you know, link security, plaintext policy, and a 3rd one i now forgot. But will probably do it the other way around: have some marked as "always advertise these because less-than-302 may need these"

ProgVal: Do you know of any major clients that don't support 302? I hope it is very marginal? Just checking... it may influence what caps i enable for the "less-than-302 too" :)

EDIT: Oh and I may do a more quick-hack-fix for 6.2.6 since it is already in rc1 stage, do a more proper fix later, but this aside

progval

2026-06-21 20:03

reporter   ~0023688

According to https://ircv3.net/software/clients there is a bunch, including popular and/or maintained clients, primarily KVirc

Issue History

Date Modified Username Field Change
2026-06-21 19:24 progval New Issue
2026-06-21 19:49 syzop Assigned To => syzop
2026-06-21 19:49 syzop Status new => acknowledged
2026-06-21 19:49 syzop Note Added: 0023687
2026-06-21 19:51 syzop Note Edited: 0023687
2026-06-21 20:03 progval Note Added: 0023688