mirror of
https://github.com/godotengine/godot.git
synced 2025-11-09 18:11:13 +00:00
Only allow absolute paths in XDG environment variables
The XDG Base Directory specification does not allow using relative paths (which broke things in Godot anyway). If a relative path is detected, it should be ignored.
This commit is contained in:
parent
aa5552278d
commit
011a99316a
3 changed files with 61 additions and 10 deletions
|
|
@ -164,7 +164,12 @@ bool OS_LinuxBSD::_check_internal_feature_support(const String &p_feature) {
|
|||
|
||||
String OS_LinuxBSD::get_config_path() const {
|
||||
if (has_environment("XDG_CONFIG_HOME")) {
|
||||
return get_environment("XDG_CONFIG_HOME");
|
||||
if (get_environment("XDG_CONFIG_HOME").is_abs_path()) {
|
||||
return get_environment("XDG_CONFIG_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CONFIG_HOME` is a relative path. Ignoring its value and falling back to `$HOME/.config` or `.` per the XDG Base Directory specification.");
|
||||
return has_environment("HOME") ? get_environment("HOME").plus_file(".config") : ".";
|
||||
}
|
||||
} else if (has_environment("HOME")) {
|
||||
return get_environment("HOME").plus_file(".config");
|
||||
} else {
|
||||
|
|
@ -174,7 +179,12 @@ String OS_LinuxBSD::get_config_path() const {
|
|||
|
||||
String OS_LinuxBSD::get_data_path() const {
|
||||
if (has_environment("XDG_DATA_HOME")) {
|
||||
return get_environment("XDG_DATA_HOME");
|
||||
if (get_environment("XDG_DATA_HOME").is_abs_path()) {
|
||||
return get_environment("XDG_DATA_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_DATA_HOME` is a relative path. Ignoring its value and falling back to `$HOME/.local/share` or `get_config_path()` per the XDG Base Directory specification.");
|
||||
return has_environment("HOME") ? get_environment("HOME").plus_file(".local/share") : get_config_path();
|
||||
}
|
||||
} else if (has_environment("HOME")) {
|
||||
return get_environment("HOME").plus_file(".local/share");
|
||||
} else {
|
||||
|
|
@ -184,7 +194,12 @@ String OS_LinuxBSD::get_data_path() const {
|
|||
|
||||
String OS_LinuxBSD::get_cache_path() const {
|
||||
if (has_environment("XDG_CACHE_HOME")) {
|
||||
return get_environment("XDG_CACHE_HOME");
|
||||
if (get_environment("XDG_CACHE_HOME").is_abs_path()) {
|
||||
return get_environment("XDG_CACHE_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `$HOME/.cache` or `get_config_path()` per the XDG Base Directory specification.");
|
||||
return has_environment("HOME") ? get_environment("HOME").plus_file(".cache") : get_config_path();
|
||||
}
|
||||
} else if (has_environment("HOME")) {
|
||||
return get_environment("HOME").plus_file(".cache");
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue