file._copySymbolicLink = function(srcpath, destpath) {
  var destdir = path.join(destpath, '..');
  var fileBase = path.basename(srcpath);
  // Use the correct relative path for the symlink
  if (!grunt.file.isPathAbsolute(srcpath)) {
    srcpath = path.relative(destdir, srcpath) || '.';
  }
  file.mkdir(destdir);
  var mode = grunt.file.isDir(srcpath) ? 'dir' : 'file';
  var destpath = path.join(destpath, fileBase);
  return fs.symlinkSync(srcpath, destpath, mode);
};
The software uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.