static gboolean
write_value_to_buffer (MdbgProtBuffer *buf, MonoTypeEnum type, const char* variableValue)
{
- char* endptr;
+ char* endptr = NULL;
+ const char *variableValueEnd = variableValue + strlen(variableValue);
errno = 0;
buffer_add_byte (buf, type);
switch (type) {
break;
case MONO_TYPE_I1: {
intmax_t val = strtoimax (variableValue, &endptr, 10);
- if (errno != 0)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
if (val >= -128 && val <= 127)
buffer_add_int (buf, val);
}
case MONO_TYPE_U1: {
intmax_t val = strtoimax (variableValue, &endptr, 10);
- if (errno != 0)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
if (val >= 0 && val <= 255)
buffer_add_int (buf, val);
}
case MONO_TYPE_I2: {
intmax_t val = strtoimax (variableValue, &endptr, 10);
- if (errno != 0)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
if (val >= -32768 && val <= 32767)
buffer_add_int (buf, val);
}
case MONO_TYPE_U2: {
intmax_t val = strtoimax (variableValue, &endptr, 10);
- if (errno != 0)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
if (val >= 0 && val <= 65535)
buffer_add_int (buf, val);
}
case MONO_TYPE_I4: {
intmax_t val = strtoimax (variableValue, &endptr, 10);
- if (errno != 0)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
if (val >= -2147483648 && val <= 2147483647)
buffer_add_int (buf, val);
}
case MONO_TYPE_U4: {
intmax_t val = strtoimax (variableValue, &endptr, 10);
- if (errno != 0)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
if (val >= 0 && val <= 4294967295)
buffer_add_int (buf, val);
}
case MONO_TYPE_I8: {
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_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)
+ 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)
+ if (errno != 0 || variableValue == endptr || endptr != variableValueEnd)
return FALSE;
buffer_add_long (buf, *((guint64*)(&val)));
break;
[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(
[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);