diff options
| author | Rafael Zalamena <rzalamena@opensourcerouting.org> | 2019-10-11 20:15:46 -0300 | 
|---|---|---|
| committer | Rafael Zalamena <rzalamena@opensourcerouting.org> | 2019-10-11 22:41:17 -0300 | 
| commit | 46fcb2df90409e401223d29c6162753bf73fca64 (patch) | |
| tree | 324c50ed09846248ec67f723c15a1100222c9a1d | |
| parent | 38e9efd85f68c115f2250d3a6e2249967b4b35b9 (diff) | |
lib: use `prefix` for yang get prefix wrapper
This change fixes a static analyzer warning and should also make us
safer when using this function. At the moment the code that triggered
the warning is the only one that uses this function.
Passing anything other than `struct prefix` to `str2prefix` function is
dangerous, because the structure might be smaller than expected and we
might have an buffer overflow.
Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
| -rw-r--r-- | lib/yang_wrappers.c | 10 | ||||
| -rw-r--r-- | lib/yang_wrappers.h | 2 | 
2 files changed, 9 insertions, 3 deletions
diff --git a/lib/yang_wrappers.c b/lib/yang_wrappers.c index 50225f35a0..a308b18b73 100644 --- a/lib/yang_wrappers.c +++ b/lib/yang_wrappers.c @@ -799,7 +799,7 @@ struct yang_data *yang_data_new_prefix(const char *xpath,  	return yang_data_new(xpath, value_str);  } -void yang_dnode_get_prefix(union prefixptr prefix, const struct lyd_node *dnode, +void yang_dnode_get_prefix(struct prefix *prefix, const struct lyd_node *dnode,  			   const char *xpath_fmt, ...)  {  	const struct lyd_node_leaf_list *dleaf; @@ -816,9 +816,15 @@ void yang_dnode_get_prefix(union prefixptr prefix, const struct lyd_node *dnode,  		YANG_DNODE_GET_ASSERT(dnode, xpath);  	} +	/* +	 * Initialize prefix to avoid static analyzer complaints about +	 * uninitialized memory. +	 */ +	memset(prefix, 0, sizeof(*prefix)); +  	dleaf = (const struct lyd_node_leaf_list *)dnode;  	assert(dleaf->value_type == LY_TYPE_STRING); -	(void)str2prefix(dleaf->value_str, prefix.p); +	(void)str2prefix(dleaf->value_str, prefix);  }  void yang_get_default_prefix(union prefixptr var, const char *xpath_fmt, ...) diff --git a/lib/yang_wrappers.h b/lib/yang_wrappers.h index 1a30ff3686..10d1ea314f 100644 --- a/lib/yang_wrappers.h +++ b/lib/yang_wrappers.h @@ -118,7 +118,7 @@ extern void yang_get_default_string_buf(char *buf, size_t size,  extern void yang_str2prefix(const char *value, union prefixptr prefix);  extern struct yang_data *yang_data_new_prefix(const char *xpath,  					      union prefixconstptr prefix); -extern void yang_dnode_get_prefix(union prefixptr prefix, +extern void yang_dnode_get_prefix(struct prefix *prefix,  				  const struct lyd_node *dnode,  				  const char *xpath_fmt, ...);  extern void yang_get_default_prefix(union prefixptr var, const char *xpath_fmt,  | 
