Increase size of XML decoder internal buffers
Since a transport (and a streamlogger) does not implement io.ByteReader xml.Decoder wraps it using `bufio.NewReader(transport)` so it can easily read bytes one at a time. This has the unfortuante effect of resulting in a panic if we try to parse a stanza that is larger than the default buffer size of 4096 bytes. To fix this we wrap the transport using `bufio.NewReaderSize()` with a much larger buffer size.
This commit is contained in:
parent
ebb6e845bf
commit
0227596f90
|
@ -1,6 +1,7 @@
|
||||||
package xmpp
|
package xmpp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"context"
|
"context"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
|
@ -57,7 +58,7 @@ func (t *WebsocketTransport) Connect() (string, error) {
|
||||||
t.wsConn = wsConn
|
t.wsConn = wsConn
|
||||||
t.startReader()
|
t.startReader()
|
||||||
|
|
||||||
t.decoder = xml.NewDecoder(t)
|
t.decoder = xml.NewDecoder(bufio.NewReaderSize(t, maxPacketSize))
|
||||||
t.decoder.CharsetReader = t.Config.CharsetReader
|
t.decoder.CharsetReader = t.Config.CharsetReader
|
||||||
|
|
||||||
return t.StartStream()
|
return t.StartStream()
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package xmpp
|
package xmpp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/xml"
|
"encoding/xml"
|
||||||
"errors"
|
"errors"
|
||||||
|
@ -37,7 +38,7 @@ func (t *XMPPTransport) Connect() (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
t.readWriter = newStreamLogger(t.conn, t.logFile)
|
t.readWriter = newStreamLogger(t.conn, t.logFile)
|
||||||
t.decoder = xml.NewDecoder(t.readWriter)
|
t.decoder = xml.NewDecoder(bufio.NewReaderSize(t.readWriter, maxPacketSize))
|
||||||
t.decoder.CharsetReader = t.Config.CharsetReader
|
t.decoder.CharsetReader = t.Config.CharsetReader
|
||||||
return t.StartStream()
|
return t.StartStream()
|
||||||
}
|
}
|
||||||
|
@ -90,7 +91,7 @@ func (t *XMPPTransport) StartTLS() error {
|
||||||
|
|
||||||
t.conn = tlsConn
|
t.conn = tlsConn
|
||||||
t.readWriter = newStreamLogger(tlsConn, t.logFile)
|
t.readWriter = newStreamLogger(tlsConn, t.logFile)
|
||||||
t.decoder = xml.NewDecoder(t.readWriter)
|
t.decoder = xml.NewDecoder(bufio.NewReaderSize(t.readWriter, maxPacketSize))
|
||||||
t.decoder.CharsetReader = t.Config.CharsetReader
|
t.decoder.CharsetReader = t.Config.CharsetReader
|
||||||
|
|
||||||
if !t.TLSConfig.InsecureSkipVerify {
|
if !t.TLSConfig.InsecureSkipVerify {
|
||||||
|
|
Loading…
Reference in a new issue