Changeset 174 in code for trunk/upstream.go


Ignore:
Timestamp:
Mar 27, 2020, 9:53:21 PM (5 years ago)
Author:
delthas
Message:

Fix parsing wrong empty element in RPL_WHOISCHANNELS channel list

Some servers add a trailing space to the channel list in
RPL_WHOISCHANNELS. This commit works around this issue by removing any
empty trailing element after splitting.

Since RPL_WHOISCHANNELS could send an empty channel parameter, we can't
just use strings.TrimRight(s, " "), because splitting on an empty string
would still return an empty element.

Closes: https://todo.sr.ht/~emersion/soju/25

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/upstream.go

    r171 r174  
    822822                        return err
    823823                }
    824                 members = strings.TrimRight(members, " ")
    825824
    826825                ch, ok := uc.channels[name]
     
    829828                        uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
    830829                                channel := dc.marshalChannel(uc, name)
    831                                 members := strings.Split(members, " ")
     830                                members := splitSpace(members)
    832831                                for i, member := range members {
    833832                                        membership, nick := uc.parseMembershipPrefix(member)
     
    851850                ch.Status = status
    852851
    853                 for _, s := range strings.Split(members, " ") {
     852                for _, s := range splitSpace(members) {
    854853                        membership, nick := uc.parseMembershipPrefix(s)
    855854                        ch.Members[nick] = membership
     
    996995                        return err
    997996                }
    998                 channels := strings.Split(channelList, " ")
     997                channels := splitSpace(channelList)
    999998
    1000999                uc.forEachDownstreamByID(downstreamID, func(dc *downstreamConn) {
     
    10951094}
    10961095
     1096func splitSpace(s string) []string {
     1097        return strings.FieldsFunc(s, func(r rune) bool {
     1098                return r == ' '
     1099        })
     1100}
     1101
    10971102func (uc *upstreamConn) register() {
    10981103        uc.nick = uc.network.Nick
Note: See TracChangeset for help on using the changeset viewer.