From cb14a3e08b051fe291fd71e8b12da84aaaba344a Mon Sep 17 00:00:00 2001 From: Andrew Mayorov Date: Tue, 23 May 2023 19:58:05 +0300 Subject: [PATCH] fix(ft): handle empty filepath in fs exporter API Fixes EMQX-9973 --- .../src/emqx_ft_storage_exporter_fs_api.erl | 2 +- apps/emqx_ft/test/emqx_ft_api_SUITE.erl | 28 +++++++++++++------ 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/apps/emqx_ft/src/emqx_ft_storage_exporter_fs_api.erl b/apps/emqx_ft/src/emqx_ft_storage_exporter_fs_api.erl index abb774f82..40944c0e8 100644 --- a/apps/emqx_ft/src/emqx_ft_storage_exporter_fs_api.erl +++ b/apps/emqx_ft/src/emqx_ft_storage_exporter_fs_api.erl @@ -167,7 +167,7 @@ parse_filepath(PathBin) -> throw({invalid, PathBin}) end, PathComponents = filename:split(PathBin), - case lists:any(fun is_special_component/1, PathComponents) of + case PathComponents == [] orelse lists:any(fun is_special_component/1, PathComponents) of false -> filename:join(PathComponents); true -> diff --git a/apps/emqx_ft/test/emqx_ft_api_SUITE.erl b/apps/emqx_ft/test/emqx_ft_api_SUITE.erl index f69e13a6d..2988e0083 100644 --- a/apps/emqx_ft/test/emqx_ft_api_SUITE.erl +++ b/apps/emqx_ft/test/emqx_ft_api_SUITE.erl @@ -140,10 +140,7 @@ t_download_transfer(Config) -> request( get, uri(["file_transfer", "file"]) ++ - query(#{ - fileref => FileId, - node => <<"nonode@nohost">> - }) + query(#{fileref => FileId, node => <<"nonode@nohost">>}) ) ), @@ -152,10 +149,25 @@ t_download_transfer(Config) -> request( get, uri(["file_transfer", "file"]) ++ - query(#{ - fileref => <<"unknown_file">>, - node => node() - }) + query(#{fileref => <<"unknown_file">>, node => node()}) + ) + ), + + ?assertMatch( + {ok, 404, #{<<"message">> := <<"Invalid query parameter", _/bytes>>}}, + request_json( + get, + uri(["file_transfer", "file"]) ++ + query(#{fileref => <<>>, node => node()}) + ) + ), + + ?assertMatch( + {ok, 404, #{<<"message">> := <<"Invalid query parameter", _/bytes>>}}, + request_json( + get, + uri(["file_transfer", "file"]) ++ + query(#{fileref => <<"/etc/passwd">>, node => node()}) ) ),