-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Unknown
-
None
-
Affects Version/s: 2.2.2
-
Component/s: BSON
-
None
-
None
-
Go Drivers
-
None
-
None
-
None
-
None
-
None
-
None
Detailed steps to reproduce the problem?
Include full traceback, if possible
We’ve encountered an intermittent panic in mongo-go-driver during calls to Collection.BulkWrite. The panic occurs inside the driver's internal logging logic, specifically within the bsoncoreutil.Truncate function, which attempts to truncate a slice with an invalid (negative) bound.
This seems to be caused by attempting to truncate a BSON byte slice when its length is zero or when the calculated truncate length is negative (e.g. slice[:-1] on an empty slice), likely during FormatDocument for command monitoring/logging.
This panic does not happen deterministically, but we've seen it occur under certain workloads (e.g., high volume batch writes).
Stack trace
panic: runtime error: slice bounds out of range [:-1] go.mongodb.org/mongo-driver/v2/internal/bsoncoreutil.Truncate({0x14000727600, 0x506}, 0xffffffffffffffff) go.mongodb.org/mongo-driver/v2@v2.2.2/internal/bsoncoreutil/bsoncoreutil.go:20 +0x20c go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore.Document.StringN({0x140009ca346, ...}, ...) go.mongodb.org/mongo-driver/v2/internal/logger.FormatDocument(...) go.mongodb.org/mongo-driver/v2/x/mongo/driver/operation.go:2096 ... go.mongodb.org/mongo-driver/v2/mongo.(*Collection).BulkWrite(...)
Reproduction
package main import ( "encoding/base64" "fmt" "go.mongodb.org/mongo-driver/v2/x/bsonx/bsoncore" ) // redactedCmd is mongodb server response message. const redactedCmd = `DQIAABBuAGQAAAAEdXBzZXJ0ZWQA3AEAAAMwACEAAAAQaW5kZXgABQAAAAdfaWQA aGN3+oAWCmDIfXkPAAMxACEAAAAQaW5kZXgABwAAAAdfaWQAaGN3+oAWCmDIfXkQ AAMyACEAAAAQaW5kZXgAFAAAAAdfaWQAaGN3+oAWCmDIfXkRAAMzACEAAAAQaW5k ZXgAHAAAAAdfaWQAaGN3+oAWCmDIfXkSAAM0ACEAAAAQaW5kZXgAIwAAAAdfaWQA aGN3+oAWCmDIfXkTAAM1ACEAAAAQaW5kZXgAJQAAAAdfaWQAaGN3+oAWCmDIfXkU AAM2ACEAAAAQaW5kZXgAPgAAAAdfaWQAaGN3+oAWCmDIfXkVAAM3ACEAAAAQaW5k ZXgASgAAAAdfaWQAaGN3+oAWCmDIfXkWAAM4ACEAAAAQaW5kZXgAUQAAAAdfaWQA aGN3+oAWCmDIfXkXAAM5ACEAAAAQaW5kZXgAVwAAAAdfaWQAaGN3+oAWCmDIfXkY AAMxMAAhAAAAEGluZGV4AFwAAAAHX2lkAGhjd/qAFgpgyH15GQADMTEAIQAAABBp bmRleABdAAAAB19pZABoY3f6gBYKYMh9eRoAAzEyACEAAAAQaW5kZXgAYwAAAAdf aWQAaGN3+oAWCmDIfXkbAAAQbk1vZGlmaWVkAFcAAAABb2sAAAAAAAAA8D8A` func main() { raw, _ := base64.StdEncoding.DecodeString(redactedCmd) str := bsoncore.Document(raw).StringN(1000) // panic: runtime error: slice bounds out of range [:-1] fmt.Println(str) }
The exact Go version used, with patch level:
$ go version
go version go1.24.4 darwin/arm64
The exact version of the Go driver used:
$ go list -m go.mongodb.org/mongo-driver
go.mongodb.org/mongo-driver/v2 v2.2.2
Describe how MongoDB is set up. Local vs Hosted, version, topology, load balanced, etc.
MongoDB server version: 7.0.5
The operating system and version (e.g. Windows 7, OSX 10.8, ...)
macOS 15.5