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:
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