mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Expand build_path() function to handle empty dir arguments gracefully
When passing an empty string as a directory, the function would produce filenames starting with a slash even when the given file_name is not an absolute path. Defaulting to the root directory is likely never intended and might conveivably be dangerous. The middle "/" is now skipped also if dir is an empty string.
This commit is contained in:
parent
4d1b9f4a08
commit
9d59a48ae2
3 changed files with 14 additions and 7 deletions
|
@ -28,11 +28,13 @@ function extract_path(input: string): string
|
||||||
## file_name: the name of the file.
|
## file_name: the name of the file.
|
||||||
##
|
##
|
||||||
## Returns: the concatenation of the directory path and file name, or just
|
## Returns: the concatenation of the directory path and file name, or just
|
||||||
## the file name if it's already an absolute path.
|
## the file name if it's already an absolute path or dir is empty.
|
||||||
function build_path(dir: string, file_name: string): string
|
function build_path(dir: string, file_name: string): string
|
||||||
{
|
{
|
||||||
return (file_name == absolute_path_pat) ?
|
# Avoid introducing "//" into the result:
|
||||||
file_name : cat(dir, "/", file_name);
|
local sep = ends_with(dir, "/") ? "" : "/";
|
||||||
|
return (file_name == absolute_path_pat || dir == "") ?
|
||||||
|
file_name : cat(dir, sep, file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
## Returns a compressed path to a file given a directory and file name.
|
## Returns a compressed path to a file given a directory and file name.
|
||||||
|
|
|
@ -79,7 +79,10 @@ test build_path_compressed()
|
||||||
/usr/local/bro/share/bro/somefile.zeek
|
/usr/local/bro/share/bro/somefile.zeek
|
||||||
/usr/local/bro/somefile.zeek
|
/usr/local/bro/somefile.zeek
|
||||||
===============================
|
===============================
|
||||||
test build_full_path()
|
test build_path()
|
||||||
===============================
|
===============================
|
||||||
/home/bro//policy/somefile.zeek
|
/home/bro/policy/somefile.zeek
|
||||||
/usr/local/bro/share/bro/somefile.zeek
|
/usr/local/bro/share/bro/somefile.zeek
|
||||||
|
policy/somefile.zeek
|
||||||
|
/usr/local/bro/share/bro/somefile.zeek
|
||||||
|
/policy/somefile.zeek
|
||||||
|
|
|
@ -50,8 +50,10 @@ print build_path_compressed("/home/bro/", "/usr/local/bro/share/bro/somefile.zee
|
||||||
print build_path_compressed("/home/bro/", "/usr/local/bro/share/../../bro/somefile.zeek");
|
print build_path_compressed("/home/bro/", "/usr/local/bro/share/../../bro/somefile.zeek");
|
||||||
|
|
||||||
print "===============================";
|
print "===============================";
|
||||||
print "test build_full_path()";
|
print "test build_path()";
|
||||||
print "===============================";
|
print "===============================";
|
||||||
print build_path("/home/bro/", "policy/somefile.zeek");
|
print build_path("/home/bro/", "policy/somefile.zeek");
|
||||||
print build_path("/home/bro/", "/usr/local/bro/share/bro/somefile.zeek");
|
print build_path("/home/bro/", "/usr/local/bro/share/bro/somefile.zeek");
|
||||||
|
print build_path("", "policy/somefile.zeek");
|
||||||
|
print build_path("", "/usr/local/bro/share/bro/somefile.zeek");
|
||||||
|
print build_path("/", "policy/somefile.zeek");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue