From: Francis Deslauriers Date: Fri, 13 Sep 2019 21:38:12 +0000 (-0400) Subject: Fix: plugin-so.c: Assert failure on short name file in plugin-path X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=4830a4bc78e3980496d53e07326b0bc703c48caa Fix: plugin-so.c: Assert failure on short name file in plugin-path Issue ===== Running the following command: babeltrace2 --plugin-path=./ ~/lttng-traces/ref/block_rq in a directory containing a two(or one) characters named file, Babeltrace aborts with this assertion failure: bt_plugin_so_create_all_from_file@plugin-so.c:1527 Babeltrace 2 library precondition not satisfied; error is bt_plugin_so_create_all_from_file@plugin-so.c:1527 Path length is too short: path-length=3, min-length=4 bt_plugin_so_create_all_from_file@plugin-so.c:1527 Aborting... This problem can also be triggered by placing a single character file at the root of the file system (e.g. /a) and using the `--plugin-path=/` parameter. The assertion failure occurs when trying to find plugins with names that end with `.so` and `.la` files. This `BT_ASSERT_PRE()` is erroneous because it asserts that every file tested have one of the right file extensions when in fact all files of the `--plugin-path` directory are tested. Solution ======== Remove the assertion and add an early return if we find that the file name can not contain any of the accepted suffices. Drawback ======== None. Signed-off-by: Francis Deslauriers Change-Id: Ib98afa3735a73c2dfabcd96aace9da4c03ae41ab Reviewed-on: https://review.lttng.org/c/babeltrace/+/2045 Reviewed-by: Simon Marchi --- diff --git a/src/lib/plugin/plugin-so.c b/src/lib/plugin/plugin-so.c index 260fd687..01db0d0a 100644 --- a/src/lib/plugin/plugin-so.c +++ b/src/lib/plugin/plugin-so.c @@ -1522,9 +1522,19 @@ int bt_plugin_so_create_all_from_file(const char *path, BT_ASSERT(plugin_set_out); *plugin_set_out = NULL; path_len = strlen(path); - BT_ASSERT_PRE(path_len > PLUGIN_SUFFIX_LEN, - "Path length is too short: path-length=%zu, min-length=%zu", - path_len, PLUGIN_SUFFIX_LEN); + + /* + * An SO plugin file must have a known plugin file suffix. So the file + * path must be longer than the suffix length. + */ + if (path_len <= PLUGIN_SUFFIX_LEN) { + BT_LOGI("Path is too short to be an `.so` or `.la` plugin file:" + "path=%s, path-length=%zu, min-length=%zu", + path, path_len, PLUGIN_SUFFIX_LEN); + status = BT_FUNC_STATUS_NOT_FOUND; + goto end; + } + BT_LOGI("Trying to create all SO plugins from file: path=\"%s\"", path); path_len++;