From 788abbebb55420ee46c90f9bf3b1974804702ace Mon Sep 17 00:00:00 2001 From: Jonathan Leonard Date: Sun, 26 Jun 2016 19:30:07 -0700 Subject: [PATCH] Calculate buffer len correctly. --- planck-c/shell.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/planck-c/shell.c b/planck-c/shell.c index 912c853b..3c5fbc3d 100644 --- a/planck-c/shell.c +++ b/planck-c/shell.c @@ -92,7 +92,7 @@ struct SystemResult { char* stderr; }; -static JSValueRef result_to_value_ref(JSContextRef ctx, struct SystemResult* result) { +static JSObjectRef result_to_object_ref(JSContextRef ctx, struct SystemResult* result) { JSValueRef arguments[3]; arguments[0] = JSValueMakeNumber(ctx, result->status); arguments[1] = c_string_to_value(ctx, result->stdout); @@ -127,13 +127,14 @@ static struct SystemResult* wait_for_child(struct ThreadParams* params) { if (params->cb_idx == -1) return ¶ms->res; else { - const char* format = "window.do_async_sh_callback(%d);"; - char buffer[sizeof(format) + sizeof("21474836") + 1]; - snprintf(buffer, sizeof(buffer), format, params->cb_idx); + const char format[] = "function() { window.do_async_sh_callback(%d); }();"; + const int len = sizeof(format) + sizeof("21474836"); + char buffer[len]; + snprintf(buffer, len, format, params->cb_idx); printf("format: %s\n", buffer); - JSValueRef result = result_to_value_ref(params->ctx, ¶ms->res); + JSObjectRef result = result_to_object_ref(params->ctx, ¶ms->res); JSStringRef bufferStr = (JSStringRef)c_string_to_value(params->ctx, buffer); - JSEvaluateScript(params->ctx, bufferStr, (JSObjectRef)result, NULL, 0, NULL); + JSEvaluateScript(params->ctx, bufferStr, result, NULL, 0, NULL); JSStringRelease(bufferStr); free(bufferStr); free(params); @@ -194,7 +195,7 @@ static JSValueRef system_call(JSContextRef ctx, char* cmd, char** env, char* dir free(cmd); free(env); free(dir); if (cb_idx != -1) return JSValueMakeNull(ctx); - else return result_to_value_ref(ctx, res); + else return (JSValueRef)result_to_object_ref(ctx, res); } return JSValueMakeNull(ctx); }