aboutsummaryrefslogtreecommitdiff
path: root/node_modules/resolve-path/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/resolve-path/index.js')
-rw-r--r--node_modules/resolve-path/index.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/node_modules/resolve-path/index.js b/node_modules/resolve-path/index.js
new file mode 100644
index 00000000..e889d9b6
--- /dev/null
+++ b/node_modules/resolve-path/index.js
@@ -0,0 +1,88 @@
+/*!
+ * resolve-path
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015-2018 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var createError = require('http-errors')
+var join = require('path').join
+var normalize = require('path').normalize
+var pathIsAbsolute = require('path-is-absolute')
+var resolve = require('path').resolve
+var sep = require('path').sep
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = resolvePath
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/
+
+/**
+ * Resolve relative path against a root path
+ *
+ * @param {string} rootPath
+ * @param {string} relativePath
+ * @return {string}
+ * @public
+ */
+
+function resolvePath (rootPath, relativePath) {
+ var path = relativePath
+ var root = rootPath
+
+ // root is optional, similar to root.resolve
+ if (arguments.length === 1) {
+ path = rootPath
+ root = process.cwd()
+ }
+
+ if (root == null) {
+ throw new TypeError('argument rootPath is required')
+ }
+
+ if (typeof root !== 'string') {
+ throw new TypeError('argument rootPath must be a string')
+ }
+
+ if (path == null) {
+ throw new TypeError('argument relativePath is required')
+ }
+
+ if (typeof path !== 'string') {
+ throw new TypeError('argument relativePath must be a string')
+ }
+
+ // containing NULL bytes is malicious
+ if (path.indexOf('\0') !== -1) {
+ throw createError(400, 'Malicious Path')
+ }
+
+ // path should never be absolute
+ if (pathIsAbsolute.posix(path) || pathIsAbsolute.win32(path)) {
+ throw createError(400, 'Malicious Path')
+ }
+
+ // path outside root
+ if (UP_PATH_REGEXP.test(normalize('.' + sep + path))) {
+ throw createError(403)
+ }
+
+ // join the relative path
+ return normalize(join(resolve(root), path))
+}