mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-30 17:18:21 +03:00
config: fix config node lookup inside empty sections to not return the section itself
When a section was empty in a configuration tree (no children - this is allowed) and we were looking for a config node inside that section, the _find_config_node function incorrectly returned the section itself if the node inside that section was not found. For example the configuration below: The config: abc { } And a function call to get the "def" node inside "abc" section: _find_config_node(..., "abc/def") ...returned the "abc" node instead of NULL ("def" not found). This in turn caused segfaults in the code using lookups in such a configuration tree as we (correctly) expected that the node returned was always the one we were looking for or NULL if not found. But if incorrect node was returned instead, we processed that as if this was the node we were looking for and so we processed its value as well. But sections don't have values => segfault.
This commit is contained in:
parent
a9d0e25627
commit
6c81cd26cc
@ -1,5 +1,6 @@
|
||||
Version 1.02.78 -
|
||||
===================================
|
||||
Fix config node lookup inside empty sections to not return the section itself.
|
||||
Extend support for status info of thin pool target.
|
||||
Fix segfault for truncated string token in config file after the first '"'.
|
||||
Close open dmeventd FIFO file descriptors on exec (FD_CLOEXEC).
|
||||
|
@ -752,12 +752,12 @@ static const struct dm_config_node *_find_config_node(const void *start,
|
||||
if (cn_found && *e)
|
||||
cn = cn_found->child;
|
||||
else
|
||||
break; /* don't move into the last node */
|
||||
return cn_found;
|
||||
|
||||
path = e;
|
||||
}
|
||||
|
||||
return cn_found;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static const struct dm_config_node *_find_first_config_node(const void *start, const char *path)
|
||||
|
Loading…
Reference in New Issue
Block a user