Same root cause as the CreateUser issue. The Rust wire format for UpdatePermissions always includes permissions_len:u32_le on the wire regardless of has_permissions (see update_permissions.rs#L37-L39 and the decoder at lines 64-65).
In the Go SDK (foreign/go/internal/command/user.go), the nil-permissions path writes only the flag byte:
} else {
bytes[position] = 0 // missing permissions_len after this
}
Note: #2973 partially fixes this function — it adds +1 to the base length to prevent a panic when permissions are nil. But the output is still 4 bytes short of what the server expects.
Fix: Change the base length from len(userIdBytes) + 1 to len(userIdBytes) + 1 + 4, and write 4 zero bytes for permissions_len in the else branch.
Same root cause as the
CreateUserissue. The Rust wire format forUpdatePermissionsalways includespermissions_len:u32_leon the wire regardless ofhas_permissions(see update_permissions.rs#L37-L39 and the decoder at lines 64-65).In the Go SDK (
foreign/go/internal/command/user.go), the nil-permissions path writes only the flag byte:Note: #2973 partially fixes this function — it adds +1 to the base length to prevent a panic when permissions are nil. But the output is still 4 bytes short of what the server expects.
Fix: Change the base length from len(userIdBytes) + 1 to len(userIdBytes) + 1 + 4, and write 4 zero bytes for permissions_len in the else branch.