From 4c9083398a6faa08568f2010a196fceb2dfee582 Mon Sep 17 00:00:00 2001 From: Francesco Abbate Date: Thu, 17 Jun 2021 18:23:30 +0200 Subject: [PATCH] Fix error in dirname computation in TreeView In TreeView:on_mouse_pressed() we need to find the directory a relative filename belongs to from its absolute filename. The code was using string.find to locate the relative filename within the absolute path but in some very specific cases we can find a pattern which is not the right-most one leading to a wrong directory name. Fix the error by adding a loop to make sure we find the right-most match. The standard Lua library has not a string.rfind to make a reverse search. Close #275 --- data/plugins/treeview.lua | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/data/plugins/treeview.lua b/data/plugins/treeview.lua index 8615343..5c2af3c 100644 --- a/data/plugins/treeview.lua +++ b/data/plugins/treeview.lua @@ -222,7 +222,14 @@ function TreeView:on_mouse_pressed(button, x, y, clicks) else if core.project_files_limit and not hovered_item.expanded then local filename, abs_filename = hovered_item.filename, hovered_item.abs_filename - local index = string.find(abs_filename, filename, 1, true) + local index = 0 + -- The loop below is used to find the first match starting from the end + -- in case there are multiple matches. + while index and index + #filename < #abs_filename do + index = string.find(abs_filename, filename, index + 1, true) + end + -- we assume here index is not nil because the abs_filename must contain the + -- relative filename local dirname = string.sub(abs_filename, 1, index - 2) core.scan_project_folder(dirname, filename) self:invalidate_cache(dirname)