From 1ff626ba4797b3ca38a7d3c9c8f923056a65e9cd Mon Sep 17 00:00:00 2001 From: David Kincaid Date: Mon, 24 Jun 2024 14:43:58 -0700 Subject: [PATCH] Fix object id decoded as wrong signedness. (#670) * Fix id being decoded as an signed integer instead of an unsigned integer. (#660) --------- Co-authored-by: karstensensensen --- src/debugger/godot3/server_controller.ts | 8 +++++++- src/debugger/godot4/server_controller.ts | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/debugger/godot3/server_controller.ts b/src/debugger/godot3/server_controller.ts index 85801bd..4dda105 100644 --- a/src/debugger/godot3/server_controller.ts +++ b/src/debugger/godot3/server_controller.ts @@ -377,10 +377,16 @@ export class ServerController { break; } case "message:inspect_object": { - const id = BigInt(command.parameters[0]); + let id = BigInt(command.parameters[0]); const className: string = command.parameters[1]; const properties: any[] = command.parameters[2]; + // message:inspect_object returns the id as an unsigned 64 bit integer, but it is decoded as a signed 64 bit integer, + // thus we need to convert it to its equivalent unsigned value here. + if (id < 0) { + id = id + BigInt(2) ** BigInt(64); + } + const rawObject = new RawObject(className); properties.forEach((prop) => { rawObject.set(prop[0], prop[5]); diff --git a/src/debugger/godot4/server_controller.ts b/src/debugger/godot4/server_controller.ts index 3c833bb..724e11e 100644 --- a/src/debugger/godot4/server_controller.ts +++ b/src/debugger/godot4/server_controller.ts @@ -376,10 +376,16 @@ export class ServerController { break; } case "scene:inspect_object": { - const id = BigInt(command.parameters[0]); + let id = BigInt(command.parameters[0]); const className: string = command.parameters[1]; const properties: any[] = command.parameters[2]; + // message:inspect_object returns the id as an unsigned 64 bit integer, but it is decoded as a signed 64 bit integer, + // thus we need to convert it to its equivalent unsigned value here. + if (id < 0) { + id = id + BigInt(2) ** BigInt(64); + } + const rawObject = new RawObject(className); properties.forEach((prop) => { rawObject.set(prop[0], prop[5]);