{"record":{"id":"a8fe994147f21114","repo":"go-delve/delve","slug":"malformed-qmemoryregioninfo-response-packet-size","errorCode":null,"errorMessage":"malformed qMemoryRegionInfo response packet (size): %v in %s","messagePattern":"malformed qMemoryRegionInfo response packet \\(size\\): (.+?) in (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/proc/gdbserial/gdbserver_conn.go","lineNumber":1295,"sourceCode":"\t}\n\n\tmri := &memoryRegionInfo{}\n\n\tcsp := colonSemicolonParser{buf: resp}\n\tfor csp.next() {\n\t\tkey, value := csp.key, csp.value\n\n\t\tswitch string(key) {\n\t\tcase \"start\":\n\t\t\tstart, err := strconv.ParseUint(string(value), 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (start): %v in %s\", err, string(resp))\n\t\t\t}\n\t\t\tmri.start = start\n\t\tcase \"size\":\n\t\t\tsize, err := strconv.ParseUint(string(value), 16, 64)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (size): %v in %s\", err, string(resp))\n\t\t\t}\n\t\t\tmri.size = size\n\t\tcase \"permissions\":\n\t\t\tmri.permissions = string(value)\n\t\tcase \"name\":\n\t\t\tnamestr, ok := decodeHexString(value)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (name): %s\", string(resp))\n\t\t\t}\n\t\t\tmri.name = namestr\n\t\tcase \"error\":\n\t\t\terrstr, ok := decodeHexString(value)\n\t\t\tif !ok {\n\t\t\t\treturn nil, fmt.Errorf(\"malformed qMemoryRegionInfo response packet (error): %s\", string(resp))\n\t\t\t}\n\t\t\treturn nil, fmt.Errorf(\"qMemoryRegionInfo error: %s\", errstr)\n\t\t}\n\t}","sourceCodeStart":1277,"sourceCodeEnd":1313,"githubUrl":"https://github.com/go-delve/delve/blob/a23773e6c31361e43246bc43a424ee009679b174/pkg/proc/gdbserial/gdbserver_conn.go#L1277-L1313","documentation":"This error is returned by memoryRegionInfo when the 'size' field of a qMemoryRegionInfo response packet fails strconv.ParseUint(value, 16, 64). The remote stub responded to qMemoryRegionInfo but its 'size:<hex>' value was not valid hexadecimal. Like the 'start' case, any unparseable field causes Delve to reject the whole response.","triggerScenarios":"Querying memory region information through the gdbserial backend when the remote stub's qMemoryRegionInfo reply contains a 'size' value that cannot be parsed as 64-bit hex (empty, decimal, 0x-prefixed, or overflowing 64 bits).","commonSituations":"Custom GDB RSP servers that report region sizes in decimal, stubs that omit the size field so the value is empty, embedded monitor stubs with buggy region enumeration, or a stub reporting a size larger than 2^64.","solutions":["Fix the remote stub to emit 'size' as bare hex (e.g. size:1000) and ensure it fits in 64 bits","Inspect the full response string embedded in the error to identify the malformed value","Check whether the stub mistakenly echoes an error string inside the size field","Fall back to a backend/stub version with correct qMemoryRegionInfo support"],"exampleFix":"// stub before (malformed)\nsize:4096\n// stub after (valid GDB RSP hex)\nsize:1000","handlingStrategy":"validation","validationCode":"func validHexSize(s string) bool {\n    if s == \"\" { return false }\n    _, err := strconv.ParseUint(s, 16, 64)\n    return err == nil\n}\n// use: if !validHexSize(sizeField) { /* reject packet before use */ }","typeGuard":"func regionSizeIsHex(resp []byte) bool {\n    for _, kv := range bytes.Split(resp, []byte(\",\")) {\n        parts := bytes.SplitN(kv, []byte(\":\"), 2)\n        if len(parts) == 2 && string(parts[0]) == \"size\" {\n            _, err := strconv.ParseUint(string(parts[1]), 16, 64)\n            return err == nil\n        }\n    }\n    return false\n}","tryCatchPattern":"mri, err := conn.memoryRegionInfo(addr)\nif err != nil {\n    if strings.Contains(err.Error(), \"malformed qMemoryRegionInfo response packet (size)\") {\n        log.Printf(\"stub sent invalid size field: %v\", err)\n        return nil\n    }\n    return err\n}","preventionTips":["Ensure stub reports sizes within uint64 range in lowercase hex","Include a protocol conformance smoke test for new stub integrations","Keep both Delve and the remote stub updated to compatible versions","Capture the raw response from the error string when filing stub bug reports"],"tags":["gdbserial","protocol","hex-parsing"],"backgroundTag":"malformed-remote-protocol-response","analyzedSha":"a23773e6c31361e43246bc43a424ee009679b174","analyzedAt":"2026-08-31T15:12:45.221Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}