{"record":{"id":"3fd398bf029deeae","repo":"t8y2/dbx","slug":"s-must-be-an-integer-number-of-bytes","errorCode":null,"errorMessage":"%s must be an integer number of bytes","messagePattern":"(.+?) must be an integer number of bytes","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"agents/drivers/zookeeper/connection.go","lineNumber":471,"sourceCode":"\tif strings.TrimSpace(config.AuthScheme) != \"\" {\n\t\treturn strings.ToLower(strings.TrimSpace(config.AuthScheme))\n\t}\n\tif configured := strings.TrimSpace(connectionURLParams(config).Get(\"auth_scheme\")); configured != \"\" {\n\t\treturn strings.ToLower(configured)\n\t}\n\treturn defaultAuthScheme\n}\n\nfunc resolveMaxBufferSize(config connectionConfig) (int, error) {\n\tconfigured := config.MaxBufferSize\n\tif configured == nil {\n\t\tvalue := strings.TrimSpace(connectionURLParams(config).Get(maxBufferSizeParam))\n\t\tif value == \"\" {\n\t\t\treturn defaultMaxBufferSize, nil\n\t\t}\n\t\tparsed, err := strconv.Atoi(value)\n\t\tif err != nil {\n\t\t\treturn 0, fmt.Errorf(\"%s must be an integer number of bytes\", maxBufferSizeParam)\n\t\t}\n\t\tconfigured = &parsed\n\t}\n\tif *configured <= 0 || *configured > maximumMaxBufferSize {\n\t\treturn 0, fmt.Errorf(\"%s must be between 1 and %d bytes\", maxBufferSizeParam, maximumMaxBufferSize)\n\t}\n\treturn *configured, nil\n}\n\nfunc connectionURLParams(config connectionConfig) url.Values {\n\tparams := strings.TrimPrefix(strings.TrimSpace(config.URLParams), \"?\")\n\tparams = strings.ReplaceAll(params, \";\", \"&\")\n\tparsed, _ := url.ParseQuery(params)\n\treturn parsed\n}\n\nfunc hasTLSOptions(config connectionConfig) bool {\n\treturn config.SSL || firstNonBlank(","sourceCodeStart":453,"sourceCodeEnd":489,"githubUrl":"https://github.com/t8y2/dbx/blob/c0390bff16418b651f4728520d99adf8ce48829a/agents/drivers/zookeeper/connection.go#L453-L489","documentation":"resolveMaxBufferSize reads the max_buffer_size connection parameter, which must be an integer number of bytes. If the raw string cannot be parsed by strconv.Atoi (non-numeric, unit suffix, empty-but-present, decimals), the driver returns this error before any connection is attempted.","triggerScenarios":"Passing max_buffer_size values like \"4mb\", \"4 MB\", \"4096.0\", or other non-integer text in the connection URL params when opening a client.","commonSituations":"Users writing sizes with byte-size suffixes out of habit (as other drivers accept), or quoting/whitespace/decimal formats that Atoi rejects.","solutions":["Set max_buffer_size to a plain integer of bytes, e.g. 4194304 instead of \"4mb\".","Strip units/decimals from the value before saving the connection config.","Convert your desired size: megabytes × 1048576.","Leave the parameter unset to use the driver default."],"exampleFix":"// before\ndsn := \"zookeeper://zk1:2181?max_buffer_size=4mb\"\n// after\ndsn := \"zookeeper://zk1:2181?max_buffer_size=4194304\"","handlingStrategy":"validation","validationCode":"func validMaxBufferSize(v string) error {\n\tv = strings.TrimSpace(v)\n\tif v == \"\" {\n\t\treturn nil\n\t}\n\tif _, err := strconv.Atoi(v); err != nil {\n\t\treturn fmt.Errorf(\"max_buffer_size must be plain integer bytes, got %q\", v)\n\t}\n\treturn nil\n}","typeGuard":null,"tryCatchPattern":"if err := validMaxBufferSize(cfg.MaxBufferSize); err != nil {\n\t// reject at config-load time, not at connect time\n\treturn cfgLoadFail(err)\n}","preventionTips":["Never write sizes with units (4mb); convert to integer bytes.","Validate connection params when parsing config, before connecting.","Keep size values in a typed int field, not a free-form string."],"tags":["zookeeper","configuration","parsing"],"backgroundTag":"invalid-connection-parameter","analyzedSha":"c0390bff16418b651f4728520d99adf8ce48829a","analyzedAt":"2026-09-05T23:05:10.900Z","contentChangedAt":"2026-09-05T23:05:10.900Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}