panics due to slice bounds out of range during logging

XMLWordPrintableJSON

    • 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

            Assignee:
            Qingyang Hu
            Reporter:
            ZY Wang
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: