diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2018-04-05 16:34:10 -0300 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2018-04-11 14:38:06 -0300 |
commit | b6e96a3651db5ed27ec561a110610893e5421a59 (patch) | |
tree | be9cdbdf52ce4bdc9f35ee3f3bbf7346bf3503d0 | |
parent | 1f0e55811b54201625f8397d14015048394d0825 (diff) | |
download | luarocks-b6e96a3651db5ed27ec561a110610893e5421a59.tar.gz luarocks-b6e96a3651db5ed27ec561a110610893e5421a59.tar.bz2 luarocks-b6e96a3651db5ed27ec561a110610893e5421a59.zip |
Try to isolate uses of namespaced name strings
Add asserts to uses of `name` arguments to check that they
are not namespaced; rename namespace-able name arguments
to `ns_name` and avoid some unrelated uses of the `name`
argument that don't represent rock names (there are still
others around, to be fixed eventually).
This may cause some failures in some untested code paths
with namespaced packages, but we hope to catch them
with better testing. Better to be safe here than to
perform filesystem operations on incorrect paths.
-rw-r--r-- | src/luarocks/core/path.lua | 2 | ||||
-rw-r--r-- | src/luarocks/deps.lua | 2 | ||||
-rw-r--r-- | src/luarocks/fs/lua.lua | 18 | ||||
-rw-r--r-- | src/luarocks/fs/unix/tools.lua | 10 | ||||
-rw-r--r-- | src/luarocks/fs/win32.lua | 10 | ||||
-rw-r--r-- | src/luarocks/manif.lua | 2 | ||||
-rw-r--r-- | src/luarocks/manif/writer.lua | 12 | ||||
-rw-r--r-- | src/luarocks/path.lua | 22 | ||||
-rw-r--r-- | src/luarocks/queries.lua | 9 | ||||
-rw-r--r-- | src/luarocks/repos.lua | 14 | ||||
-rw-r--r-- | src/luarocks/results.lua | 2 | ||||
-rw-r--r-- | src/luarocks/search.lua | 18 | ||||
-rw-r--r-- | src/luarocks/util.lua | 21 |
13 files changed, 71 insertions, 71 deletions
diff --git a/src/luarocks/core/path.lua b/src/luarocks/core/path.lua index fd84c7df..125500b7 100644 --- a/src/luarocks/core/path.lua +++ b/src/luarocks/core/path.lua | |||
@@ -24,7 +24,7 @@ end | |||
24 | -- @return string: a pathname with the same directory parts and a versioned basename. | 24 | -- @return string: a pathname with the same directory parts and a versioned basename. |
25 | function path.versioned_name(file, prefix, name, version) | 25 | function path.versioned_name(file, prefix, name, version) |
26 | assert(type(file) == "string") | 26 | assert(type(file) == "string") |
27 | assert(type(name) == "string") | 27 | assert(type(name) == "string" and not name:match("/")) |
28 | assert(type(version) == "string") | 28 | assert(type(version) == "string") |
29 | 29 | ||
30 | local rest = file:sub(#prefix+1):gsub("^/*", "") | 30 | local rest = file:sub(#prefix+1):gsub("^/*", "") |
diff --git a/src/luarocks/deps.lua b/src/luarocks/deps.lua index 182bbfb2..ccbced0c 100644 --- a/src/luarocks/deps.lua +++ b/src/luarocks/deps.lua | |||
@@ -394,7 +394,7 @@ end | |||
394 | function deps.scan_deps(results, manifest, name, version, deps_mode) | 394 | function deps.scan_deps(results, manifest, name, version, deps_mode) |
395 | assert(type(results) == "table") | 395 | assert(type(results) == "table") |
396 | assert(type(manifest) == "table") | 396 | assert(type(manifest) == "table") |
397 | assert(type(name) == "string") | 397 | assert(type(name) == "string" and not name:match("/")) |
398 | assert(type(version) == "string") | 398 | assert(type(version) == "string") |
399 | 399 | ||
400 | local fetch = require("luarocks.fetch") | 400 | local fetch = require("luarocks.fetch") |
diff --git a/src/luarocks/fs/lua.lua b/src/luarocks/fs/lua.lua index 89426b09..38a37f0a 100644 --- a/src/luarocks/fs/lua.lua +++ b/src/luarocks/fs/lua.lua | |||
@@ -791,14 +791,14 @@ end | |||
791 | if posix.mkdtemp then | 791 | if posix.mkdtemp then |
792 | 792 | ||
793 | --- Create a temporary directory. | 793 | --- Create a temporary directory. |
794 | -- @param name string: name pattern to use for avoiding conflicts | 794 | -- @param name_pattern string: name pattern to use for avoiding conflicts |
795 | -- when creating temporary directory. | 795 | -- when creating temporary directory. |
796 | -- @return string or (nil, string): name of temporary directory or (nil, error message) on failure. | 796 | -- @return string or (nil, string): name of temporary directory or (nil, error message) on failure. |
797 | function fs_lua.make_temp_dir(name) | 797 | function fs_lua.make_temp_dir(name_pattern) |
798 | assert(type(name) == "string") | 798 | assert(type(name_pattern) == "string") |
799 | name = dir.normalize(name) | 799 | name_pattern = dir.normalize(name_pattern) |
800 | 800 | ||
801 | return posix.mkdtemp((os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name:gsub("/", "_") .. "-XXXXXX") | 801 | return posix.mkdtemp((os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-XXXXXX") |
802 | end | 802 | end |
803 | 803 | ||
804 | end -- if posix.mkdtemp | 804 | end -- if posix.mkdtemp |
@@ -892,13 +892,13 @@ end | |||
892 | --- Check whether a file is a Lua script | 892 | --- Check whether a file is a Lua script |
893 | -- When the file can be succesfully compiled by the configured | 893 | -- When the file can be succesfully compiled by the configured |
894 | -- Lua interpreter, it's considered to be a valid Lua file. | 894 | -- Lua interpreter, it's considered to be a valid Lua file. |
895 | -- @param name filename of file to check | 895 | -- @param filename filename of file to check |
896 | -- @return boolean true, if it is a Lua script, false otherwise | 896 | -- @return boolean true, if it is a Lua script, false otherwise |
897 | function fs_lua.is_lua(name) | 897 | function fs_lua.is_lua(filename) |
898 | name = name:gsub([[%\]],"/") -- normalize on fw slash to prevent escaping issues | 898 | filename = filename:gsub([[%\]],"/") -- normalize on fw slash to prevent escaping issues |
899 | local lua = fs.Q(dir.path(cfg.variables["LUA_BINDIR"], cfg.lua_interpreter)) -- get lua interpreter configured | 899 | local lua = fs.Q(dir.path(cfg.variables["LUA_BINDIR"], cfg.lua_interpreter)) -- get lua interpreter configured |
900 | -- execute on configured interpreter, might not be the same as the interpreter LR is run on | 900 | -- execute on configured interpreter, might not be the same as the interpreter LR is run on |
901 | local result = fs.execute_string(lua..[[ -e "if loadfile(']]..name..[[') then os.exit() else os.exit(1) end"]]) | 901 | local result = fs.execute_string(lua..[[ -e "if loadfile(']]..filename..[[') then os.exit() else os.exit(1) end"]]) |
902 | return (result == true) | 902 | return (result == true) |
903 | end | 903 | end |
904 | 904 | ||
diff --git a/src/luarocks/fs/unix/tools.lua b/src/luarocks/fs/unix/tools.lua index 33ba911d..be5ba7a7 100644 --- a/src/luarocks/fs/unix/tools.lua +++ b/src/luarocks/fs/unix/tools.lua | |||
@@ -223,14 +223,14 @@ function tools.set_time(file, time) | |||
223 | end | 223 | end |
224 | 224 | ||
225 | --- Create a temporary directory. | 225 | --- Create a temporary directory. |
226 | -- @param name string: name pattern to use for avoiding conflicts | 226 | -- @param name_pattern string: name pattern to use for avoiding conflicts |
227 | -- when creating temporary directory. | 227 | -- when creating temporary directory. |
228 | -- @return string or (nil, string): name of temporary directory or (nil, error message) on failure. | 228 | -- @return string or (nil, string): name of temporary directory or (nil, error message) on failure. |
229 | function tools.make_temp_dir(name) | 229 | function tools.make_temp_dir(name_pattern) |
230 | assert(type(name) == "string") | 230 | assert(type(name_pattern) == "string") |
231 | name = dir.normalize(name) | 231 | name_pattern = dir.normalize(name_pattern) |
232 | 232 | ||
233 | local template = (os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name:gsub("/", "_") .. "-XXXXXX" | 233 | local template = (os.getenv("TMPDIR") or "/tmp") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-XXXXXX" |
234 | local pipe = io.popen(vars.MKTEMP.." -d "..fs.Q(template)) | 234 | local pipe = io.popen(vars.MKTEMP.." -d "..fs.Q(template)) |
235 | local dirname = pipe:read("*l") | 235 | local dirname = pipe:read("*l") |
236 | pipe:close() | 236 | pipe:close() |
diff --git a/src/luarocks/fs/win32.lua b/src/luarocks/fs/win32.lua index 6fd24fa5..a915deb6 100644 --- a/src/luarocks/fs/win32.lua +++ b/src/luarocks/fs/win32.lua | |||
@@ -248,14 +248,14 @@ function win32.is_writable(file) | |||
248 | end | 248 | end |
249 | 249 | ||
250 | --- Create a temporary directory. | 250 | --- Create a temporary directory. |
251 | -- @param name string: name pattern to use for avoiding conflicts | 251 | -- @param name_pattern string: name pattern to use for avoiding conflicts |
252 | -- when creating temporary directory. | 252 | -- when creating temporary directory. |
253 | -- @return string or (nil, string): name of temporary directory or (nil, error message) on failure. | 253 | -- @return string or (nil, string): name of temporary directory or (nil, error message) on failure. |
254 | function win32.make_temp_dir(name) | 254 | function win32.make_temp_dir(name_pattern) |
255 | assert(type(name) == "string") | 255 | assert(type(name_pattern) == "string") |
256 | name = dir.normalize(name) | 256 | name_pattern = dir.normalize(name_pattern) |
257 | 257 | ||
258 | local temp_dir = os.getenv("TMP") .. "/luarocks_" .. name:gsub("/", "_") .. "-" .. tostring(math.floor(math.random() * 10000)) | 258 | local temp_dir = os.getenv("TMP") .. "/luarocks_" .. name_pattern:gsub("/", "_") .. "-" .. tostring(math.floor(math.random() * 10000)) |
259 | local ok, err = fs.make_dir(temp_dir) | 259 | local ok, err = fs.make_dir(temp_dir) |
260 | if ok then | 260 | if ok then |
261 | return temp_dir | 261 | return temp_dir |
diff --git a/src/luarocks/manif.lua b/src/luarocks/manif.lua index 5ac9920d..146d5d73 100644 --- a/src/luarocks/manif.lua +++ b/src/luarocks/manif.lua | |||
@@ -39,7 +39,7 @@ function manif.load_local_manifest(repo_url) | |||
39 | end | 39 | end |
40 | 40 | ||
41 | function manif.load_rock_manifest(name, version, root) | 41 | function manif.load_rock_manifest(name, version, root) |
42 | assert(type(name) == "string") | 42 | assert(type(name) == "string" and not name:match("/")) |
43 | assert(type(version) == "string") | 43 | assert(type(version) == "string") |
44 | 44 | ||
45 | local name_version = name.."/"..version | 45 | local name_version = name.."/"..version |
diff --git a/src/luarocks/manif/writer.lua b/src/luarocks/manif/writer.lua index a6c70f4d..07628ea2 100644 --- a/src/luarocks/manif/writer.lua +++ b/src/luarocks/manif/writer.lua | |||
@@ -25,7 +25,7 @@ local queries = require("luarocks.queries") | |||
25 | local function store_package_items(storage, name, version, items) | 25 | local function store_package_items(storage, name, version, items) |
26 | assert(type(storage) == "table") | 26 | assert(type(storage) == "table") |
27 | assert(type(items) == "table") | 27 | assert(type(items) == "table") |
28 | assert(type(name) == "string") | 28 | assert(type(name) == "string" and not name:match("/")) |
29 | assert(type(version) == "string") | 29 | assert(type(version) == "string") |
30 | 30 | ||
31 | local package_identifier = name.."/"..version | 31 | local package_identifier = name.."/"..version |
@@ -49,7 +49,7 @@ end | |||
49 | local function remove_package_items(storage, name, version, items) | 49 | local function remove_package_items(storage, name, version, items) |
50 | assert(type(storage) == "table") | 50 | assert(type(storage) == "table") |
51 | assert(type(items) == "table") | 51 | assert(type(items) == "table") |
52 | assert(type(name) == "string") | 52 | assert(type(name) == "string" and not name:match("/")) |
53 | assert(type(version) == "string") | 53 | assert(type(version) == "string") |
54 | 54 | ||
55 | local package_identifier = name.."/"..version | 55 | local package_identifier = name.."/"..version |
@@ -235,7 +235,7 @@ end | |||
235 | -- message in case of errors. | 235 | -- message in case of errors. |
236 | local function save_table(where, name, tbl) | 236 | local function save_table(where, name, tbl) |
237 | assert(type(where) == "string") | 237 | assert(type(where) == "string") |
238 | assert(type(name) == "string") | 238 | assert(type(name) == "string" and not name:match("/")) |
239 | assert(type(tbl) == "table") | 239 | assert(type(tbl) == "table") |
240 | 240 | ||
241 | local filename = dir.path(where, name) | 241 | local filename = dir.path(where, name) |
@@ -284,7 +284,7 @@ end | |||
284 | -- @return true if successful (or unnecessary, if there is no namespace), | 284 | -- @return true if successful (or unnecessary, if there is no namespace), |
285 | -- or nil and an error message. | 285 | -- or nil and an error message. |
286 | function writer.make_namespace_file(name, version, namespace) | 286 | function writer.make_namespace_file(name, version, namespace) |
287 | assert(type(name) == "string") | 287 | assert(type(name) == "string" and not name:match("/")) |
288 | assert(type(version) == "string") | 288 | assert(type(version) == "string") |
289 | assert(type(namespace) == "string" or not namespace) | 289 | assert(type(namespace) == "string" or not namespace) |
290 | name = util.adjust_name_and_namespace(name, { namespace = namespace }) | 290 | name = util.adjust_name_and_namespace(name, { namespace = namespace }) |
@@ -360,7 +360,7 @@ end | |||
360 | -- @return boolean or (nil, string): True if manifest was updated successfully, | 360 | -- @return boolean or (nil, string): True if manifest was updated successfully, |
361 | -- or nil and an error message. | 361 | -- or nil and an error message. |
362 | function writer.add_to_manifest(name, version, repo, deps_mode) | 362 | function writer.add_to_manifest(name, version, repo, deps_mode) |
363 | assert(type(name) == "string") | 363 | assert(type(name) == "string" and not name:match("/")) |
364 | assert(type(version) == "string") | 364 | assert(type(version) == "string") |
365 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | 365 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) |
366 | assert(type(deps_mode) == "string") | 366 | assert(type(deps_mode) == "string") |
@@ -397,7 +397,7 @@ end | |||
397 | -- @return boolean or (nil, string): True if manifest was updated successfully, | 397 | -- @return boolean or (nil, string): True if manifest was updated successfully, |
398 | -- or nil and an error message. | 398 | -- or nil and an error message. |
399 | function writer.remove_from_manifest(name, version, repo, deps_mode) | 399 | function writer.remove_from_manifest(name, version, repo, deps_mode) |
400 | assert(type(name) == "string") | 400 | assert(type(name) == "string" and not name:match("/")) |
401 | assert(type(version) == "string") | 401 | assert(type(version) == "string") |
402 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) | 402 | local rocks_dir = path.rocks_dir(repo or cfg.root_dir) |
403 | assert(type(deps_mode) == "string") | 403 | assert(type(deps_mode) == "string") |
diff --git a/src/luarocks/path.lua b/src/luarocks/path.lua index 7a569169..f6b12727 100644 --- a/src/luarocks/path.lua +++ b/src/luarocks/path.lua | |||
@@ -53,7 +53,7 @@ end | |||
53 | -- @param tree string or nil: If given, specifies the local tree to use. | 53 | -- @param tree string or nil: If given, specifies the local tree to use. |
54 | -- the package (and by extension, the path) exists. | 54 | -- the package (and by extension, the path) exists. |
55 | function path.versions_dir(name, tree) | 55 | function path.versions_dir(name, tree) |
56 | assert(type(name) == "string") | 56 | assert(type(name) == "string" and not name:match("/")) |
57 | tree = tree or cfg.root_dir | 57 | tree = tree or cfg.root_dir |
58 | return dir.path(path.rocks_dir(tree), name) | 58 | return dir.path(path.rocks_dir(tree), name) |
59 | end | 59 | end |
@@ -65,7 +65,7 @@ end | |||
65 | -- @return string: The resulting path -- does not guarantee that | 65 | -- @return string: The resulting path -- does not guarantee that |
66 | -- the package (and by extension, the path) exists. | 66 | -- the package (and by extension, the path) exists. |
67 | function path.install_dir(name, version, tree) | 67 | function path.install_dir(name, version, tree) |
68 | assert(type(name) == "string") | 68 | assert(type(name) == "string" and not name:match("/")) |
69 | assert(type(version) == "string") | 69 | assert(type(version) == "string") |
70 | tree = tree or cfg.root_dir | 70 | tree = tree or cfg.root_dir |
71 | return dir.path(path.rocks_dir(tree), name, version) | 71 | return dir.path(path.rocks_dir(tree), name, version) |
@@ -78,7 +78,7 @@ end | |||
78 | -- @return string: The resulting path -- does not guarantee that | 78 | -- @return string: The resulting path -- does not guarantee that |
79 | -- the package (and by extension, the file) exists. | 79 | -- the package (and by extension, the file) exists. |
80 | function path.rockspec_file(name, version, tree) | 80 | function path.rockspec_file(name, version, tree) |
81 | assert(type(name) == "string") | 81 | assert(type(name) == "string" and not name:match("/")) |
82 | assert(type(version) == "string") | 82 | assert(type(version) == "string") |
83 | tree = tree or cfg.root_dir | 83 | tree = tree or cfg.root_dir |
84 | return dir.path(path.rocks_dir(tree), name, version, name.."-"..version..".rockspec") | 84 | return dir.path(path.rocks_dir(tree), name, version, name.."-"..version..".rockspec") |
@@ -91,7 +91,7 @@ end | |||
91 | -- @return string: The resulting path -- does not guarantee that | 91 | -- @return string: The resulting path -- does not guarantee that |
92 | -- the package (and by extension, the file) exists. | 92 | -- the package (and by extension, the file) exists. |
93 | function path.rock_manifest_file(name, version, tree) | 93 | function path.rock_manifest_file(name, version, tree) |
94 | assert(type(name) == "string") | 94 | assert(type(name) == "string" and not name:match("/")) |
95 | assert(type(version) == "string") | 95 | assert(type(version) == "string") |
96 | tree = tree or cfg.root_dir | 96 | tree = tree or cfg.root_dir |
97 | return dir.path(path.rocks_dir(tree), name, version, "rock_manifest") | 97 | return dir.path(path.rocks_dir(tree), name, version, "rock_manifest") |
@@ -104,7 +104,7 @@ end | |||
104 | -- @return string: The resulting path -- does not guarantee that | 104 | -- @return string: The resulting path -- does not guarantee that |
105 | -- the package (and by extension, the file) exists. | 105 | -- the package (and by extension, the file) exists. |
106 | function path.rock_namespace_file(name, version, tree) | 106 | function path.rock_namespace_file(name, version, tree) |
107 | assert(type(name) == "string") | 107 | assert(type(name) == "string" and not name:match("/")) |
108 | assert(type(version) == "string") | 108 | assert(type(version) == "string") |
109 | tree = tree or cfg.root_dir | 109 | tree = tree or cfg.root_dir |
110 | return dir.path(path.rocks_dir(tree), name, version, "rock_namespace") | 110 | return dir.path(path.rocks_dir(tree), name, version, "rock_namespace") |
@@ -117,7 +117,7 @@ end | |||
117 | -- @return string: The resulting path -- does not guarantee that | 117 | -- @return string: The resulting path -- does not guarantee that |
118 | -- the package (and by extension, the path) exists. | 118 | -- the package (and by extension, the path) exists. |
119 | function path.lib_dir(name, version, tree) | 119 | function path.lib_dir(name, version, tree) |
120 | assert(type(name) == "string") | 120 | assert(type(name) == "string" and not name:match("/")) |
121 | assert(type(version) == "string") | 121 | assert(type(version) == "string") |
122 | tree = tree or cfg.root_dir | 122 | tree = tree or cfg.root_dir |
123 | return dir.path(path.rocks_dir(tree), name, version, "lib") | 123 | return dir.path(path.rocks_dir(tree), name, version, "lib") |
@@ -130,7 +130,7 @@ end | |||
130 | -- @return string: The resulting path -- does not guarantee that | 130 | -- @return string: The resulting path -- does not guarantee that |
131 | -- the package (and by extension, the path) exists. | 131 | -- the package (and by extension, the path) exists. |
132 | function path.lua_dir(name, version, tree) | 132 | function path.lua_dir(name, version, tree) |
133 | assert(type(name) == "string") | 133 | assert(type(name) == "string" and not name:match("/")) |
134 | assert(type(version) == "string") | 134 | assert(type(version) == "string") |
135 | tree = tree or cfg.root_dir | 135 | tree = tree or cfg.root_dir |
136 | return dir.path(path.rocks_dir(tree), name, version, "lua") | 136 | return dir.path(path.rocks_dir(tree), name, version, "lua") |
@@ -143,7 +143,7 @@ end | |||
143 | -- @return string: The resulting path -- does not guarantee that | 143 | -- @return string: The resulting path -- does not guarantee that |
144 | -- the package (and by extension, the path) exists. | 144 | -- the package (and by extension, the path) exists. |
145 | function path.doc_dir(name, version, tree) | 145 | function path.doc_dir(name, version, tree) |
146 | assert(type(name) == "string") | 146 | assert(type(name) == "string" and not name:match("/")) |
147 | assert(type(version) == "string") | 147 | assert(type(version) == "string") |
148 | tree = tree or cfg.root_dir | 148 | tree = tree or cfg.root_dir |
149 | return dir.path(path.rocks_dir(tree), name, version, "doc") | 149 | return dir.path(path.rocks_dir(tree), name, version, "doc") |
@@ -156,7 +156,7 @@ end | |||
156 | -- @return string: The resulting path -- does not guarantee that | 156 | -- @return string: The resulting path -- does not guarantee that |
157 | -- the package (and by extension, the path) exists. | 157 | -- the package (and by extension, the path) exists. |
158 | function path.conf_dir(name, version, tree) | 158 | function path.conf_dir(name, version, tree) |
159 | assert(type(name) == "string") | 159 | assert(type(name) == "string" and not name:match("/")) |
160 | assert(type(version) == "string") | 160 | assert(type(version) == "string") |
161 | tree = tree or cfg.root_dir | 161 | tree = tree or cfg.root_dir |
162 | return dir.path(path.rocks_dir(tree), name, version, "conf") | 162 | return dir.path(path.rocks_dir(tree), name, version, "conf") |
@@ -170,7 +170,7 @@ end | |||
170 | -- @return string: The resulting path -- does not guarantee that | 170 | -- @return string: The resulting path -- does not guarantee that |
171 | -- the package (and by extension, the path) exists. | 171 | -- the package (and by extension, the path) exists. |
172 | function path.bin_dir(name, version, tree) | 172 | function path.bin_dir(name, version, tree) |
173 | assert(type(name) == "string") | 173 | assert(type(name) == "string" and not name:match("/")) |
174 | assert(type(version) == "string") | 174 | assert(type(version) == "string") |
175 | tree = tree or cfg.root_dir | 175 | tree = tree or cfg.root_dir |
176 | return dir.path(path.rocks_dir(tree), name, version, "bin") | 176 | return dir.path(path.rocks_dir(tree), name, version, "bin") |
@@ -198,7 +198,7 @@ end | |||
198 | -- @return string: A URL or pathname following LuaRocks naming conventions. | 198 | -- @return string: A URL or pathname following LuaRocks naming conventions. |
199 | function path.make_url(pathname, name, version, arch) | 199 | function path.make_url(pathname, name, version, arch) |
200 | assert(type(pathname) == "string") | 200 | assert(type(pathname) == "string") |
201 | assert(type(name) == "string") | 201 | assert(type(name) == "string" and not name:match("/")) |
202 | assert(type(version) == "string") | 202 | assert(type(version) == "string") |
203 | assert(type(arch) == "string") | 203 | assert(type(arch) == "string") |
204 | 204 | ||
diff --git a/src/luarocks/queries.lua b/src/luarocks/queries.lua index 888d9cf7..e47a5722 100644 --- a/src/luarocks/queries.lua +++ b/src/luarocks/queries.lua | |||
@@ -36,15 +36,15 @@ local function arch_to_table(input) | |||
36 | end | 36 | end |
37 | 37 | ||
38 | --- Prepare a query in dependency table format. | 38 | --- Prepare a query in dependency table format. |
39 | -- @param name string: the package name, may contain a namespace. | 39 | -- @param ns_name string: the package name, may contain a namespace. |
40 | -- @param version string?: the package version. | 40 | -- @param version string?: the package version. |
41 | -- @param substring boolean?: match substrings of the name | 41 | -- @param substring boolean?: match substrings of the name |
42 | -- (default is false, match full name) | 42 | -- (default is false, match full name) |
43 | -- @param arch string?: a string with pipe-separated accepted arch values | 43 | -- @param arch string?: a string with pipe-separated accepted arch values |
44 | -- @param operator string?: operator for version matching (default is "==") | 44 | -- @param operator string?: operator for version matching (default is "==") |
45 | -- @return table: A query in table format | 45 | -- @return table: A query in table format |
46 | function queries.new(name, version, substring, arch, operator) | 46 | function queries.new(ns_name, version, substring, arch, operator) |
47 | assert(type(name) == "string") | 47 | assert(type(ns_name) == "string") |
48 | assert(type(version) == "string" or not version) | 48 | assert(type(version) == "string" or not version) |
49 | assert(type(substring) == "boolean" or not substring) | 49 | assert(type(substring) == "boolean" or not substring) |
50 | assert(type(arch) == "string" or not arch) | 50 | assert(type(arch) == "string" or not arch) |
@@ -52,8 +52,7 @@ function queries.new(name, version, substring, arch, operator) | |||
52 | 52 | ||
53 | operator = operator or "==" | 53 | operator = operator or "==" |
54 | 54 | ||
55 | local namespace | 55 | local name, namespace = util.split_namespace(ns_name) |
56 | name, namespace = util.split_namespace(name) | ||
57 | 56 | ||
58 | local self = { | 57 | local self = { |
59 | name = name, | 58 | name = name, |
diff --git a/src/luarocks/repos.lua b/src/luarocks/repos.lua index 35f5e3bc..00e7d3b8 100644 --- a/src/luarocks/repos.lua +++ b/src/luarocks/repos.lua | |||
@@ -32,7 +32,7 @@ local vers = require("luarocks.core.vers") | |||
32 | -- @return table or nil: An array of strings listing installed | 32 | -- @return table or nil: An array of strings listing installed |
33 | -- versions of a package, or nil if none is available. | 33 | -- versions of a package, or nil if none is available. |
34 | local function get_installed_versions(name) | 34 | local function get_installed_versions(name) |
35 | assert(type(name) == "string") | 35 | assert(type(name) == "string" and not name:match("/")) |
36 | 36 | ||
37 | local dirs = fs.list_dir(path.versions_dir(name)) | 37 | local dirs = fs.list_dir(path.versions_dir(name)) |
38 | return (dirs and #dirs > 0) and dirs or nil | 38 | return (dirs and #dirs > 0) and dirs or nil |
@@ -45,7 +45,7 @@ end | |||
45 | -- @return boolean: true if a package is installed, | 45 | -- @return boolean: true if a package is installed, |
46 | -- false otherwise. | 46 | -- false otherwise. |
47 | function repos.is_installed(name, version) | 47 | function repos.is_installed(name, version) |
48 | assert(type(name) == "string") | 48 | assert(type(name) == "string" and not name:match("/")) |
49 | assert(type(version) == "string") | 49 | assert(type(version) == "string") |
50 | 50 | ||
51 | return fs.is_dir(path.install_dir(name, version)) | 51 | return fs.is_dir(path.install_dir(name, version)) |
@@ -93,7 +93,7 @@ end | |||
93 | -- If no modules are found or if package name or version | 93 | -- If no modules are found or if package name or version |
94 | -- are invalid, an empty table is returned. | 94 | -- are invalid, an empty table is returned. |
95 | function repos.package_modules(name, version) | 95 | function repos.package_modules(name, version) |
96 | assert(type(name) == "string") | 96 | assert(type(name) == "string" and not name:match("/")) |
97 | assert(type(version) == "string") | 97 | assert(type(version) == "string") |
98 | 98 | ||
99 | local result = {} | 99 | local result = {} |
@@ -114,7 +114,7 @@ end | |||
114 | -- If no commands are found or if package name or version | 114 | -- If no commands are found or if package name or version |
115 | -- are invalid, an empty table is returned. | 115 | -- are invalid, an empty table is returned. |
116 | function repos.package_commands(name, version) | 116 | function repos.package_commands(name, version) |
117 | assert(type(name) == "string") | 117 | assert(type(name) == "string" and not name:match("/")) |
118 | assert(type(version) == "string") | 118 | assert(type(version) == "string") |
119 | 119 | ||
120 | local result = {} | 120 | local result = {} |
@@ -131,7 +131,7 @@ end | |||
131 | -- @return boolean: returns true if rock contains platform-specific | 131 | -- @return boolean: returns true if rock contains platform-specific |
132 | -- binary executables, or false if it is a pure-Lua rock. | 132 | -- binary executables, or false if it is a pure-Lua rock. |
133 | function repos.has_binaries(name, version) | 133 | function repos.has_binaries(name, version) |
134 | assert(type(name) == "string") | 134 | assert(type(name) == "string" and not name:match("/")) |
135 | assert(type(version) == "string") | 135 | assert(type(version) == "string") |
136 | 136 | ||
137 | local rock_manifest = manif.load_rock_manifest(name, version) | 137 | local rock_manifest = manif.load_rock_manifest(name, version) |
@@ -272,7 +272,7 @@ end | |||
272 | -- "one" for the current default tree, "all" for all trees, | 272 | -- "one" for the current default tree, "all" for all trees, |
273 | -- "order" for all trees with priority >= the current default, "none" for no trees. | 273 | -- "order" for all trees with priority >= the current default, "none" for no trees. |
274 | function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) | 274 | function repos.deploy_files(name, version, wrap_bin_scripts, deps_mode) |
275 | assert(type(name) == "string") | 275 | assert(type(name) == "string" and not name:match("/")) |
276 | assert(type(version) == "string") | 276 | assert(type(version) == "string") |
277 | assert(type(wrap_bin_scripts) == "boolean") | 277 | assert(type(wrap_bin_scripts) == "boolean") |
278 | 278 | ||
@@ -351,7 +351,7 @@ end | |||
351 | -- was deleted. This is used during 'purge', as every module | 351 | -- was deleted. This is used during 'purge', as every module |
352 | -- will be eventually deleted. | 352 | -- will be eventually deleted. |
353 | function repos.delete_version(name, version, deps_mode, quick) | 353 | function repos.delete_version(name, version, deps_mode, quick) |
354 | assert(type(name) == "string") | 354 | assert(type(name) == "string" and not name:match("/")) |
355 | assert(type(version) == "string") | 355 | assert(type(version) == "string") |
356 | assert(type(deps_mode) == "string") | 356 | assert(type(deps_mode) == "string") |
357 | 357 | ||
diff --git a/src/luarocks/results.lua b/src/luarocks/results.lua index 3e743883..a6ebfbf3 100644 --- a/src/luarocks/results.lua +++ b/src/luarocks/results.lua | |||
@@ -12,7 +12,7 @@ function result_mt.type() | |||
12 | end | 12 | end |
13 | 13 | ||
14 | function results.new(name, version, repo, arch, namespace) | 14 | function results.new(name, version, repo, arch, namespace) |
15 | assert(type(name) == "string") | 15 | assert(type(name) == "string" and not name:match("/")) |
16 | assert(type(version) == "string") | 16 | assert(type(version) == "string") |
17 | assert(type(repo) == "string") | 17 | assert(type(repo) == "string") |
18 | assert(type(arch) == "string" or not arch) | 18 | assert(type(arch) == "string" or not arch) |
diff --git a/src/luarocks/search.lua b/src/luarocks/search.lua index a86db890..49098642 100644 --- a/src/luarocks/search.lua +++ b/src/luarocks/search.lua | |||
@@ -53,7 +53,7 @@ end | |||
53 | -- @param tree string: The local tree to use. | 53 | -- @param tree string: The local tree to use. |
54 | -- @return string?: The namespace if it exists, or nil. | 54 | -- @return string?: The namespace if it exists, or nil. |
55 | local function read_namespace(name, version, tree) | 55 | local function read_namespace(name, version, tree) |
56 | assert(type(name) == "string") | 56 | assert(type(name) == "string" and not name:match("/")) |
57 | assert(type(version) == "string") | 57 | assert(type(version) == "string") |
58 | assert(type(tree) == "string") | 58 | assert(type(tree) == "string") |
59 | 59 | ||
@@ -198,7 +198,7 @@ end | |||
198 | -- @return string or nil: the URL for the latest version if one could | 198 | -- @return string or nil: the URL for the latest version if one could |
199 | -- be picked, or nil. | 199 | -- be picked, or nil. |
200 | local function pick_latest_version(name, versions) | 200 | local function pick_latest_version(name, versions) |
201 | assert(type(name) == "string") | 201 | assert(type(name) == "string" and not name:match("/")) |
202 | assert(type(versions) == "table") | 202 | assert(type(versions) == "table") |
203 | 203 | ||
204 | local vtables = {} | 204 | local vtables = {} |
@@ -318,24 +318,26 @@ end | |||
318 | -- user possibilities if it couldn't narrow down a single match. | 318 | -- user possibilities if it couldn't narrow down a single match. |
319 | -- @param action function: A function that takes a .src.rock or | 319 | -- @param action function: A function that takes a .src.rock or |
320 | -- .rockspec URL as a parameter. | 320 | -- .rockspec URL as a parameter. |
321 | -- @param name string: A rock name | 321 | -- @param ns_name string: A rock name, may be namespaced |
322 | -- @param version string or nil: A version number may also be given. | 322 | -- @param version string or nil: A version number may also be given. |
323 | -- @return The result of the action function, or nil and an error message. | 323 | -- @return The result of the action function, or nil and an error message. |
324 | function search.act_on_src_or_rockspec(action, name, version, ...) | 324 | function search.act_on_src_or_rockspec(action, ns_name, version, ...) |
325 | assert(type(action) == "function") | 325 | assert(type(action) == "function") |
326 | assert(type(name) == "string") | 326 | assert(type(ns_name) == "string") |
327 | assert(type(version) == "string" or not version) | 327 | assert(type(version) == "string" or not version) |
328 | 328 | ||
329 | local _, namespace = util.split_namespace(name) | 329 | local query = queries.new(ns_name, version, false, "src|rockspec") |
330 | local query = queries.new(name, version, false, "src|rockspec") | ||
331 | local url, err = search.find_suitable_rock(query) | 330 | local url, err = search.find_suitable_rock(query) |
332 | if not url then | 331 | if not url then |
333 | return nil, "Could not find a result named "..name..(version and " "..version or "")..": "..err | 332 | return nil, "Could not find a result named "..tostring(query)..": "..err |
334 | end | 333 | end |
334 | local _, namespace = util.split_namespace(ns_name) | ||
335 | return action(url, namespace, ...) | 335 | return action(url, namespace, ...) |
336 | end | 336 | end |
337 | 337 | ||
338 | function search.pick_installed_rock(query, given_tree) | 338 | function search.pick_installed_rock(query, given_tree) |
339 | assert(query:type() == "query") | ||
340 | |||
339 | local result_tree = {} | 341 | local result_tree = {} |
340 | local tree_map = {} | 342 | local tree_map = {} |
341 | local trees = cfg.rocks_trees | 343 | local trees = cfg.rocks_trees |
diff --git a/src/luarocks/util.lua b/src/luarocks/util.lua index 76b46d55..426868e4 100644 --- a/src/luarocks/util.lua +++ b/src/luarocks/util.lua | |||
@@ -459,18 +459,17 @@ end | |||
459 | -- If a namespace is given in user/rock syntax, update the --namespace flag; | 459 | -- If a namespace is given in user/rock syntax, update the --namespace flag; |
460 | -- If a namespace is given in --namespace flag, update the user/rock syntax. | 460 | -- If a namespace is given in --namespace flag, update the user/rock syntax. |
461 | -- In case of conflicts, the user/rock syntax takes precedence. | 461 | -- In case of conflicts, the user/rock syntax takes precedence. |
462 | function util.adjust_name_and_namespace(name, flags) | 462 | function util.adjust_name_and_namespace(ns_name, flags) |
463 | assert(type(name) == "string" or not name) | 463 | assert(type(ns_name) == "string" or not ns_name) |
464 | assert(type(flags) == "table") | 464 | assert(type(flags) == "table") |
465 | 465 | ||
466 | if not name then | 466 | if not ns_name then |
467 | return | 467 | return |
468 | elseif name:match("%.rockspec$") or name:match("%.rock$") then | 468 | elseif ns_name:match("%.rockspec$") or ns_name:match("%.rock$") then |
469 | return name | 469 | return ns_name |
470 | end | 470 | end |
471 | 471 | ||
472 | local namespace | 472 | local name, namespace = util.split_namespace(ns_name) |
473 | name, namespace = util.split_namespace(name) | ||
474 | if namespace then | 473 | if namespace then |
475 | flags["namespace"] = namespace | 474 | flags["namespace"] = namespace |
476 | end | 475 | end |
@@ -481,14 +480,14 @@ function util.adjust_name_and_namespace(name, flags) | |||
481 | end | 480 | end |
482 | 481 | ||
483 | -- Split name and namespace of a package name. | 482 | -- Split name and namespace of a package name. |
484 | -- @param name a name that may be in "namespace/name" format | 483 | -- @param ns_name a name that may be in "namespace/name" format |
485 | -- @return string, string? - name and optionally a namespace | 484 | -- @return string, string? - name and optionally a namespace |
486 | function util.split_namespace(name) | 485 | function util.split_namespace(ns_name) |
487 | local p1, p2 = name:match("^([^/]+)/([^/]+)$") | 486 | local p1, p2 = ns_name:match("^([^/]+)/([^/]+)$") |
488 | if p1 then | 487 | if p1 then |
489 | return p2, p1 | 488 | return p2, p1 |
490 | end | 489 | end |
491 | return name | 490 | return ns_name |
492 | end | 491 | end |
493 | 492 | ||
494 | return util | 493 | return util |