diff --git a/go.mod b/go.mod index 4e6d9fd2..79fb737f 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/go-ldap/ldap/v3 v3.1.7 github.com/go-sql-driver/mysql v1.5.0 github.com/goshuirc/e-nfa v0.0.0-20160917075329-7071788e3940 // indirect - github.com/goshuirc/irc-go v0.0.0-20190713001546-05ecc95249a0 + github.com/goshuirc/irc-go v0.0.0-20200311142257-57fd157327ac github.com/mattn/go-colorable v0.1.4 github.com/mattn/go-isatty v0.0.10 // indirect github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b diff --git a/go.sum b/go.sum index d12d6f80..3788d575 100644 --- a/go.sum +++ b/go.sum @@ -2,6 +2,7 @@ code.cloudfoundry.org/bytefmt v0.0.0-20190819182555-854d396b647c h1:2RuXx1+tSNWR code.cloudfoundry.org/bytefmt v0.0.0-20190819182555-854d396b647c/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc= code.cloudfoundry.org/bytefmt v0.0.0-20200131002437-cf55d5288a48 h1:/EMHruHCFXR9xClkGV/t0rmHrdhX4+trQUcBqjwc9xE= code.cloudfoundry.org/bytefmt v0.0.0-20200131002437-cf55d5288a48/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc= +github.com/DanielOaks/go-idn v0.0.0-20160120021903-76db0e10dc65/go.mod h1:GYIaL2hleNQvfMUBTes1Zd/lDTyI/p2hv3kYB4jssyU= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= @@ -22,6 +23,8 @@ github.com/goshuirc/e-nfa v0.0.0-20160917075329-7071788e3940 h1:KmRLPRstEJiE/9Oj github.com/goshuirc/e-nfa v0.0.0-20160917075329-7071788e3940/go.mod h1:VOmrX6cmj7zwUeexC9HzznUdTIObHqIXUrWNYS+Ik7w= github.com/goshuirc/irc-go v0.0.0-20190713001546-05ecc95249a0 h1:unxsR0de0MIS708eZI7lKa6HiP8FS0PhGCWwwEt9+vQ= github.com/goshuirc/irc-go v0.0.0-20190713001546-05ecc95249a0/go.mod h1:rhIkxdehxNqK9iwJXWzQnxlGuuUR4cHu7PN64VryKXk= +github.com/goshuirc/irc-go v0.0.0-20200311142257-57fd157327ac h1:0JSojWrghcpK9/wx1RpV9Bv2d+3TbBWtHWubKjU2tao= +github.com/goshuirc/irc-go v0.0.0-20200311142257-57fd157327ac/go.mod h1:BRnLblzpqH2T5ANCODHBZLytz0NZN2KaMJ+di8oh3EM= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= diff --git a/vendor/github.com/goshuirc/irc-go/ircmsg/message.go b/vendor/github.com/goshuirc/irc-go/ircmsg/message.go index c6afb291..9aa13855 100644 --- a/vendor/github.com/goshuirc/irc-go/ircmsg/message.go +++ b/vendor/github.com/goshuirc/irc-go/ircmsg/message.go @@ -52,10 +52,19 @@ type IrcMessage struct { Prefix string Command string Params []string + forceTrailing bool tags map[string]string clientOnlyTags map[string]string } +// ForceTrailing ensures that when the message is serialized, the final parameter +// will be encoded as a "trailing parameter" (preceded by a colon). This is +// almost never necessary and should not be used except when having to interact +// with broken implementations that don't correctly interpret IRC messages. +func (msg *IrcMessage) ForceTrailing() { + msg.forceTrailing = true +} + // GetTag returns whether a tag is present, and if so, what its value is. func (msg *IrcMessage) GetTag(tagName string) (present bool, value string) { if len(tagName) == 0 { @@ -321,6 +330,10 @@ func (ircmsg *IrcMessage) LineBytesStrict(fromClient bool, truncateLen int) ([]b return ircmsg.line(tagLimit, clientOnlyTagDataLimit, serverAddedTagDataLimit, truncateLen) } +func paramRequiresTrailing(param string) bool { + return len(param) == 0 || strings.IndexByte(param, ' ') != -1 || param[0] == ':' +} + // line returns a sendable line created from an IrcMessage. func (ircmsg *IrcMessage) line(tagLimit, clientOnlyTagDataLimit, serverAddedTagDataLimit, truncateLen int) ([]byte, error) { if len(ircmsg.Command) < 1 { @@ -376,11 +389,12 @@ func (ircmsg *IrcMessage) line(tagLimit, clientOnlyTagDataLimit, serverAddedTagD for i, param := range ircmsg.Params { buf.WriteByte(' ') - if len(param) < 1 || strings.IndexByte(param, ' ') != -1 || param[0] == ':' { - if i != len(ircmsg.Params)-1 { - return nil, ErrorBadParam - } + requiresTrailing := paramRequiresTrailing(param) + lastParam := i == len(ircmsg.Params)-1 + if (requiresTrailing || ircmsg.forceTrailing) && lastParam { buf.WriteByte(':') + } else if requiresTrailing && !lastParam { + return nil, ErrorBadParam } buf.WriteString(param) } diff --git a/vendor/modules.txt b/vendor/modules.txt index 664500f4..4109f6a4 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -15,7 +15,7 @@ github.com/go-sql-driver/mysql # github.com/goshuirc/e-nfa v0.0.0-20160917075329-7071788e3940 ## explicit github.com/goshuirc/e-nfa -# github.com/goshuirc/irc-go v0.0.0-20190713001546-05ecc95249a0 +# github.com/goshuirc/irc-go v0.0.0-20200311142257-57fd157327ac ## explicit github.com/goshuirc/irc-go/ircfmt github.com/goshuirc/irc-go/ircmatch