add dmjson_get_string && fix segfault: add tests case ptr != NULL

This commit is contained in:
Omar Kallel 2020-09-21 11:18:38 +01:00 committed by Amin Ben Ramdhane
parent 92cdf363f5
commit c549dad741
5 changed files with 44 additions and 19 deletions

View file

@ -132,3 +132,8 @@ void dm_update_enabled_notify(struct dm_enabled_notify *p, char *new_value)
free(p->value); // Should be free and not dmfree
p->value = strdup(new_value);
}
void dmjson_get_string(char *jkey, char **jval)
{
bbf_api_dmjson_get_string(jkey, jval);
}

View file

@ -27,6 +27,7 @@ json_object *dmjson_select_obj(json_object * jobj, char *argv[]);
void del_list_fault_param(struct param_fault *param_fault);
int copy_temporary_file_to_original_file(char *f1, char *f2);
void dmjson_get_var(char *jkey, char **jval);
void dmjson_get_string(char *jkey, char **jval);
void dm_update_enabled_notify(struct dm_enabled_notify *p, char *new_value);
void apply_end_session(void);

View file

@ -940,14 +940,16 @@ int bbf_api_dm_update_file_enabled_notify(char *param, char *new_value)
if (len)
buf[len-1] = '\0';
bbf_api_dmjson_parse_init(buf);
bbf_api_dmjson_get_var("parameter", &jval);
parameter = dmstrdup(jval);
bbf_api_dmjson_get_var("value", &jval);
value = dmstrdup(jval);
bbf_api_dmjson_get_var("notification", &jval);
notification = dmstrdup(jval);
bbf_api_dmjson_get_var("type", &jval);
type = dmstrdup(jval);
bbf_api_dmjson_get_string("parameter", &jval);
if (jval == NULL || strlen(jval) == 0)
continue;
parameter = dmstrdup(jval?jval:"");
bbf_api_dmjson_get_string("value", &jval);
value = dmstrdup(jval?jval:"");
bbf_api_dmjson_get_string("notification", &jval);
notification = dmstrdup(jval?jval:"");
bbf_api_dmjson_get_string("type", &jval);
type = dmstrdup(jval?jval:"");
bbf_api_dmjson_parse_fini();
if (strcmp(parameter, param) == 0)
dmjson_fprintf(ftmp, 4, DMJSON_ARGS{{"parameter", parameter}, {"notification", notification}, {"value", new_value}, {"type", type}});
@ -1982,12 +1984,14 @@ int dm_entry_enabled_notify_check_value_change(struct dmctx *dmctx, void (*add_l
if (len)
buf[len-1] = '\0';
bbf_api_dmjson_parse_init(buf);
bbf_api_dmjson_get_var("parameter", &jval);
dmctx->in_param = dmstrdup(jval);
bbf_api_dmjson_get_var("value", &jval);
dmctx->in_value = dmstrdup(jval);
bbf_api_dmjson_get_var("notification", &jval);
dmctx->in_notification = dmstrdup(jval);
bbf_api_dmjson_get_string("parameter", &jval);
if (jval == NULL || strlen(jval) == 0)
continue;
dmctx->in_param = dmstrdup(jval?jval:"");
bbf_api_dmjson_get_string("value", &jval);
dmctx->in_value = dmstrdup(jval?jval:"");
bbf_api_dmjson_get_string("notification", &jval);
dmctx->in_notification = dmstrdup(jval?jval:"");
bbf_api_dmjson_parse_fini();
dmctx->checkobj = NULL ;
dmctx->checkleaf = NULL;
@ -2007,7 +2011,6 @@ static int enabled_notify_check_value_change_obj(DMOBJECT_ARGS)
static int enabled_notify_check_value_change_param(DMPARAM_ARGS)
{
char *refparam, *value = "";
dmastrcat(&refparam, node->current_object, lastname);
if (strcmp(refparam, dmctx->in_param) != 0) {
dmfree(refparam);
@ -2015,7 +2018,7 @@ static int enabled_notify_check_value_change_param(DMPARAM_ARGS)
}
(get_cmd)(refparam, dmctx, data, instance, &value);
if (strcmp(value, dmctx->in_value) != 0) {
if (value && strcmp(value, dmctx->in_value) != 0) {
if (api_add_list_value_change) {
api_add_list_value_change(refparam, value, DMT_TYPE[type]);
}

View file

@ -6,6 +6,7 @@
* as published by the Free Software Foundation
*
* Author: MOHAMED Kallel <mohamed.kallel@pivasoftware.com>
* Authro: Omar Kallel <omar.kallel@pivasoftware.com>
*
*/
@ -15,8 +16,10 @@ static json_object *dmjson_jobj = NULL;
void dm_add_json_obj(json_object *json_obj_out, char *object, char *string)
{
json_object *json_obj_tmp = json_object_new_string(string);
json_object_object_add(json_obj_out, object, json_obj_tmp);
if (object != NULL && string != NULL) {
json_object *json_obj_tmp = json_object_new_string(string);
json_object_object_add(json_obj_out, object, json_obj_tmp);
}
}
static void inline __dmjson_fprintf(FILE *fp, int argc, struct dmjson_arg dmarg[])
@ -290,3 +293,15 @@ void bbf_api_dmjson_get_var(char *jkey, char **jval)
}
}
}
void bbf_api_dmjson_get_string(char *jkey, char **jval)
{
*jval = "";
if (dmjson_jobj == NULL)
return;
struct json_object *get_obj = json_object_object_get(dmjson_jobj, jkey);
if (get_obj) {
*jval = json_object_get_string(get_obj);
}
}

View file

@ -33,6 +33,7 @@ void dmjson_fprintf(FILE *fp, int argc, struct dmjson_arg dmarg[]);
void bbf_api_dmjson_parse_init(char *msg);
void bbf_api_dmjson_parse_fini(void);
void bbf_api_dmjson_get_var(char *jkey, char **jval);
void bbf_api_dmjson_get_string(char *jkey, char **jval);
json_object *bbf_api_dmjson_select_obj(json_object * jobj, char *argv[]);
json_object *__dmjson_get_obj(json_object *mainjobj, int argc, ...);
char *____dmjson_get_value_in_obj(json_object *mainjobj, char *argv[]);