function download_selected($dir)
{
    $dir = get_abs_dir($dir);
    global $site_name;
    require_once("_include/fun_archive.php");
    $items = qxpage_selected_items();

    // check if user selected any items to download
    switch (count($items))
    {
        case 0:
            show_error($GLOBALS["error_msg"]["miscselitems"]);
        case 1:
            if (is_file($items[0]))
            {
                download_item( $dir, $items[0] );
                break;
            }
            // nobreak, downloading a directory is done
            // with the zip file
        default:
            zip_download( $dir, $items );
    }
}
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.