diff options
| author | Fabio Alessandrelli | 2016-10-04 15:02:36 +0200 |
|---|---|---|
| committer | Rémi Verschelde | 2016-10-09 17:34:23 +0200 |
| commit | ba095b8dccdc347c898934d4d7a78b7d5b9c35e1 (patch) | |
| tree | 68e92c34e018bd2aafbd9bd0400d2be1b059b322 | |
| parent | 9593863a92915c4e0816ac4af013be2983f56ca5 (diff) | |
| download | godot-ba095b8dccdc347c898934d4d7a78b7d5b9c35e1.tar.gz godot-ba095b8dccdc347c898934d4d7a78b7d5b9c35e1.tar.zst godot-ba095b8dccdc347c898934d4d7a78b7d5b9c35e1.zip | |
Add warning when (pre)loading paths with leading / (#4280 - #3106)
(cherry picked from commit e59820ac94b7c9706298d5559608937dfca332e5)
| -rw-r--r-- | modules/gdscript/gd_functions.cpp | 7 | ||||
| -rw-r--r-- | modules/gdscript/gd_parser.cpp | 8 |
2 files changed, 14 insertions, 1 deletions
diff --git a/modules/gdscript/gd_functions.cpp b/modules/gdscript/gd_functions.cpp index a565e866d..0369e323b 100644 --- a/modules/gdscript/gd_functions.cpp +++ b/modules/gdscript/gd_functions.cpp @@ -840,8 +840,13 @@ void GDFunctions::call(Function p_func,const Variant **p_args,int p_arg_count,Va r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; r_error.argument=0; r_ret=Variant(); + } else if(((String)(*p_args[0])).begins_with("/")) { + r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT; + r_error.argument=0; + r_ret=RTR("Paths cannot start with '/', absolute paths must start with \'res://\', \'user://\', or \'local://\'"); + } else { + r_ret=ResourceLoader::load(*p_args[0]); } - r_ret=ResourceLoader::load(*p_args[0]); } break; case INST2DICT: { diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp index e829fa86b..eb33f0e75 100644 --- a/modules/gdscript/gd_parser.cpp +++ b/modules/gdscript/gd_parser.cpp @@ -303,6 +303,10 @@ GDParser::Node* GDParser::_parse_expression(Node *p_parent,bool p_static,bool p_ _set_error("expected string constant as 'preload' argument."); return NULL; } + if (path.begins_with("/")) { + _set_error("Paths cannot start with '/', absolute paths must start with \'res://\', \'user://\', or \'local://\'"); + return NULL; + } if (!path.is_abs_path() && base_path!="") path=base_path+"/"+path; path = path.replace("///","//").simplify_path(); @@ -2022,6 +2026,10 @@ void GDParser::_parse_extends(ClassNode *p_class) { _set_error("'extends' constant must be a string."); return; } + if (((String)(constant)).begins_with("/")) { + _set_error("Paths cannot start with '/', absolute paths must start with \'res://\', \'user://\', or \'local://\'"); + return; + } p_class->extends_file=constant; tokenizer->advance(); |
