solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

commit 860462a6161bb46fc256f6b40924a3bc69e08d90
parent bac0e2a65d1c3306463c1a2112607063e4aff1ab
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri, 24 Feb 2017 11:47:57 +0100

Fix the parsing of the CLI rendering arguments

The CLI might crash when a rendering option did not have a value.

Diffstat:
Msrc/solstice_args.c | 11+++++++----
Msrc/test_solstice_args.c | 16++++++++++++++++
2 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/solstice_args.c b/src/solstice_args.c @@ -219,6 +219,12 @@ parse_rendering_option(const char* str, struct solstice_args* args) key = strtok_r(buf, "=", &ctx); val = strtok_r(NULL, "", &ctx); + if(!val) { + fprintf(stderr, "Missing a value to the rendering option `%s'.\n", key); + res = RES_BAD_ARG; + goto error; + } + if(!strcmp(key, "fov")) { res = parse_fov(val, &args->camera.fov_x); if(res != RES_OK) goto error; @@ -266,15 +272,12 @@ parse_rendering_options(const char* str, struct solstice_args* args) char* tk; char* ctx; res_T res = RES_OK; - ASSERT(args); - (void)str, (void)args; + ASSERT(args && str); /* Setup default values of the rendering parameters */ args->camera = SOLSTICE_ARGS_DEFAULT.camera; args->img = SOLSTICE_ARGS_DEFAULT.img; - if(!str) goto exit; - if(strlen(str) >= sizeof(buf) - 1/*NULL char*/) { fprintf(stderr, "Could not duplicate the rendering options string `%s'.\n", str); diff --git a/src/test_solstice_args.c b/src/test_solstice_args.c @@ -166,6 +166,22 @@ test_rendering(void) cmd = cmd_create(0, "test", "-r", "fov=123a", NULL); CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG); cmd_delete(cmd); + + cmd = cmd_create(0, "test", "-r", "up", NULL); + CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG); + cmd_delete(cmd); + + cmd = cmd_create(0, "test", "-r", "img=", NULL); + CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG); + cmd_delete(cmd); + + cmd = cmd_create(0, "test", "-r", "fov::::", NULL); + CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG); + cmd_delete(cmd); + + cmd = cmd_create(0, "test", "-r", "::tgt", NULL); + CHECK(solstice_args_init(&args, cmd_size(cmd), cmd), RES_BAD_ARG); + cmd_delete(cmd); } static void