From fb84cb51ab10e83d675eac4199c351ffcffe434d Mon Sep 17 00:00:00 2001 From: Thays Date: Thu, 24 Jun 2021 01:58:31 -0300 Subject: [PATCH 1/3] Fixing new debugger tests errors. Errno is not being assigned anymore. DebuggerTests.SetVariableValueTests --- src/mono/mono/mini/mini-wasm-debugger.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm-debugger.c b/src/mono/mono/mini/mini-wasm-debugger.c index fd19c6a846277b..4b4fb8a4c81ad2 100644 --- a/src/mono/mono/mini/mini-wasm-debugger.c +++ b/src/mono/mono/mini/mini-wasm-debugger.c @@ -249,7 +249,7 @@ mono_wasm_breakpoint_hit (void) static gboolean write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* variableValue) { - char* endptr; + char* endptr = NULL; errno = 0; buffer_add_byte (buf, type); switch (type) { @@ -268,7 +268,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia break; case MONO_TYPE_I1: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; if (val >= -128 && val <= 127) buffer_add_int (buf, val); @@ -278,7 +278,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_U1: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; if (val >= 0 && val <= 255) buffer_add_int (buf, val); @@ -288,7 +288,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_I2: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; if (val >= -32768 && val <= 32767) buffer_add_int (buf, val); @@ -298,7 +298,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_U2: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; if (val >= 0 && val <= 65535) buffer_add_int (buf, val); @@ -308,7 +308,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_I4: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; if (val >= -2147483648 && val <= 2147483647) buffer_add_int (buf, val); @@ -318,7 +318,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_U4: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; if (val >= 0 && val <= 4294967295) buffer_add_int (buf, val); @@ -328,7 +328,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_I8: { long long val = strtoll (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; buffer_add_long (buf, val); break; @@ -342,14 +342,14 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_R4: { gfloat val = strtof (variableValue, &endptr); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; buffer_add_int (buf, *((gint32*)(&val))); break; } case MONO_TYPE_R8: { gdouble val = strtof (variableValue, &endptr); - if (errno != 0) + if (errno != 0 || variableValue == endptr) return FALSE; buffer_add_long (buf, *((guint64*)(&val))); break; From 635d4b827b4e21e65675a47b9259b85b43dc1019 Mon Sep 17 00:00:00 2001 From: Thays Date: Thu, 24 Jun 2021 02:30:01 -0300 Subject: [PATCH 2/3] Passing icordbg flag as false. --- src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs b/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs index b3eebcd7e381df..48ed3a9992bb94 100644 --- a/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs +++ b/src/mono/wasm/debugger/BrowserDebugProxy/MonoSDBHelper.cs @@ -547,6 +547,7 @@ public async Task SetProtocolVersion(SessionId sessionId, CancellationToke var command_params_writer = new MonoBinaryWriter(command_params); command_params_writer.Write(MAJOR_VERSION); command_params_writer.Write(MINOR_VERSION); + command_params_writer.Write((byte)0); var ret_debugger_cmd_reader = await SendDebuggerAgentCommand(sessionId, CmdVM.SetProtocolVersion, command_params, token); return true; From 1f5b37386fd6d0266411289b1af5572ef5aeed60 Mon Sep 17 00:00:00 2001 From: Thays Date: Thu, 24 Jun 2021 12:43:59 -0300 Subject: [PATCH 3/3] Adding new tests. --- src/mono/mono/mini/mini-wasm-debugger.c | 21 ++++++++++--------- .../SetVariableValueTests.cs | 2 ++ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/mono/mono/mini/mini-wasm-debugger.c b/src/mono/mono/mini/mini-wasm-debugger.c index 4b4fb8a4c81ad2..8c5951cf1040a4 100644 --- a/src/mono/mono/mini/mini-wasm-debugger.c +++ b/src/mono/mono/mini/mini-wasm-debugger.c @@ -250,6 +250,7 @@ static gboolean write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* variableValue) { char* endptr = NULL; + const char *variableValueEnd = variableValue + strlen(variableValue); errno = 0; buffer_add_byte (buf, type); switch (type) { @@ -268,7 +269,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia break; case MONO_TYPE_I1: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; if (val >= -128 && val <= 127) buffer_add_int (buf, val); @@ -278,7 +279,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_U1: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; if (val >= 0 && val <= 255) buffer_add_int (buf, val); @@ -288,7 +289,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_I2: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; if (val >= -32768 && val <= 32767) buffer_add_int (buf, val); @@ -298,7 +299,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_U2: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; if (val >= 0 && val <= 65535) buffer_add_int (buf, val); @@ -308,7 +309,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_I4: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; if (val >= -2147483648 && val <= 2147483647) buffer_add_int (buf, val); @@ -318,7 +319,7 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_U4: { intmax_t val = strtoimax (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; if (val >= 0 && val <= 4294967295) buffer_add_int (buf, val); @@ -328,28 +329,28 @@ write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* varia } case MONO_TYPE_I8: { long long val = strtoll (variableValue, &endptr, 10); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; buffer_add_long (buf, val); break; } case MONO_TYPE_U8: { long long val = strtoll (variableValue, &endptr, 10); - if (errno != 0) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; buffer_add_long (buf, val); break; } case MONO_TYPE_R4: { gfloat val = strtof (variableValue, &endptr); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; buffer_add_int (buf, *((gint32*)(&val))); break; } case MONO_TYPE_R8: { gdouble val = strtof (variableValue, &endptr); - if (errno != 0 || variableValue == endptr) + if (errno != 0 || variableValue == endptr || endptr != variableValueEnd) return FALSE; buffer_add_long (buf, *((guint64*)(&val))); break; diff --git a/src/mono/wasm/debugger/DebuggerTestSuite/SetVariableValueTests.cs b/src/mono/wasm/debugger/DebuggerTestSuite/SetVariableValueTests.cs index 5f4a5a4f93b565..9214a4fe6e88d1 100644 --- a/src/mono/wasm/debugger/DebuggerTestSuite/SetVariableValueTests.cs +++ b/src/mono/wasm/debugger/DebuggerTestSuite/SetVariableValueTests.cs @@ -212,6 +212,7 @@ await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", [InlineData(1, "b", 20, "wrongValue")] [InlineData(2, "c", 30, "wrongValue")] [InlineData(3, "d", 50, "wrongValue")] + [InlineData(3, "d", 50, "123wrongValue")] public async Task SetVariableValuesAtBreakpointSiteFail(int offset, string variableName, int originalValue, string invalidValue){ await SetBreakpointInMethod("debugger-test.dll", "Math", "IntAdd", offset); var pause_location = await EvaluateAndCheck( @@ -263,6 +264,7 @@ await StepAndCheck(StepKind.Over, "dotnet://debugger-test.dll/debugger-test.cs", [InlineData("A", 10, "error", false)] [InlineData("d", 15, "20", true)] [InlineData("d", 15, "error", false)] + [InlineData("d", 15, "123error", false)] public async Task TestSetValueOnObject(string prop_name, int prop_value, string prop_new_value, bool expect_ok) { var bp = await SetBreakpointInMethod("debugger-test.dll", "Math", "UseComplex", 5);