mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-03 23:21:15 +00:00 
			
		
		
		
	Added/Fixed null pointer checks
This commit is contained in:
		
							parent
							
								
									53c0010932
								
							
						
					
					
						commit
						7a07895920
					
				
					 14 changed files with 39 additions and 47 deletions
				
			
		| 
						 | 
					@ -247,11 +247,8 @@ void RasterizerGLES3::set_current_render_target(RID p_render_target) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (p_render_target.is_valid()) {
 | 
						if (p_render_target.is_valid()) {
 | 
				
			||||||
		RasterizerStorageGLES3::RenderTarget *rt = storage->render_target_owner.getornull(p_render_target);
 | 
							RasterizerStorageGLES3::RenderTarget *rt = storage->render_target_owner.getornull(p_render_target);
 | 
				
			||||||
		if (!rt) {
 | 
					 | 
				
			||||||
			storage->frame.current_rt = NULL;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		ERR_FAIL_COND(!rt);
 | 
					 | 
				
			||||||
		storage->frame.current_rt = rt;
 | 
							storage->frame.current_rt = rt;
 | 
				
			||||||
 | 
							ERR_FAIL_COND(!rt);
 | 
				
			||||||
		storage->frame.clear_request = false;
 | 
							storage->frame.clear_request = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		glViewport(0, 0, rt->width, rt->height);
 | 
							glViewport(0, 0, rt->width, rt->height);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1646,7 +1646,7 @@ PropertyInfo AnimationKeyEditor::_find_hint_for_track(int p_idx, NodePath &r_bas
 | 
				
			||||||
	List<PropertyInfo> pinfo;
 | 
						List<PropertyInfo> pinfo;
 | 
				
			||||||
	if (res.is_valid())
 | 
						if (res.is_valid())
 | 
				
			||||||
		res->get_property_list(&pinfo);
 | 
							res->get_property_list(&pinfo);
 | 
				
			||||||
	else
 | 
						else if (node)
 | 
				
			||||||
		node->get_property_list(&pinfo);
 | 
							node->get_property_list(&pinfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) {
 | 
						for (List<PropertyInfo>::Element *E = pinfo.front(); E; E = E->next()) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -253,8 +253,8 @@ static void _create_script_templates(const String &p_path) {
 | 
				
			||||||
	dir->change_dir(p_path);
 | 
						dir->change_dir(p_path);
 | 
				
			||||||
	for (int i = 0; i < keys.size(); i++) {
 | 
						for (int i = 0; i < keys.size(); i++) {
 | 
				
			||||||
		if (!dir->file_exists(keys[i])) {
 | 
							if (!dir->file_exists(keys[i])) {
 | 
				
			||||||
			file->reopen(p_path.plus_file((String)keys[i]), FileAccess::WRITE);
 | 
								Error err = file->reopen(p_path.plus_file((String)keys[i]), FileAccess::WRITE);
 | 
				
			||||||
			ERR_FAIL_COND(!file);
 | 
								ERR_FAIL_COND(err != OK);
 | 
				
			||||||
			file->store_string(templates[keys[i]]);
 | 
								file->store_string(templates[keys[i]]);
 | 
				
			||||||
			file->close();
 | 
								file->close();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3766,7 +3766,7 @@ bool CanvasItemEditorViewport::_cyclical_dependency_exists(const String &p_targe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &path, const Point2 &p_point) {
 | 
					void CanvasItemEditorViewport::_create_nodes(Node *parent, Node *child, String &path, const Point2 &p_point) {
 | 
				
			||||||
	child->set_name(path.get_file().get_basename());
 | 
						child->set_name(path.get_file().get_basename());
 | 
				
			||||||
	Ref<Texture> texture = Object::cast_to<Texture>(Ref<Texture>(ResourceCache::get(path)).ptr());
 | 
						Ref<Texture> texture = Ref<Texture>(Object::cast_to<Texture>(ResourceCache::get(path)));
 | 
				
			||||||
	Size2 texture_size = texture->get_size();
 | 
						Size2 texture_size = texture->get_size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	editor_data->get_undo_redo().add_do_method(parent, "add_child", child);
 | 
						editor_data->get_undo_redo().add_do_method(parent, "add_child", child);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -822,7 +822,7 @@ public:
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				Node *another = node->get_node(node_path);
 | 
									Node *another = node->get_node(node_path);
 | 
				
			||||||
				if (!node) {
 | 
									if (!another) {
 | 
				
			||||||
					r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
										r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
				
			||||||
					r_error_str = "Path does not lead Node!";
 | 
										r_error_str = "Path does not lead Node!";
 | 
				
			||||||
					return 0;
 | 
										return 0;
 | 
				
			||||||
| 
						 | 
					@ -1596,7 +1596,7 @@ public:
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				Node *another = node->get_node(node_path);
 | 
									Node *another = node->get_node(node_path);
 | 
				
			||||||
				if (!node) {
 | 
									if (!another) {
 | 
				
			||||||
					r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
										r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
				
			||||||
					r_error_str = "Path does not lead Node!";
 | 
										r_error_str = "Path does not lead Node!";
 | 
				
			||||||
					return 0;
 | 
										return 0;
 | 
				
			||||||
| 
						 | 
					@ -2241,7 +2241,7 @@ public:
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				Node *another = node->get_node(node_path);
 | 
									Node *another = node->get_node(node_path);
 | 
				
			||||||
				if (!node) {
 | 
									if (!another) {
 | 
				
			||||||
					r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
										r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
				
			||||||
					r_error_str = RTR("Path does not lead Node!");
 | 
										r_error_str = RTR("Path does not lead Node!");
 | 
				
			||||||
					return 0;
 | 
										return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2087,7 +2087,7 @@ public:
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Node *another = node->get_node(path);
 | 
							Node *another = node->get_node(path);
 | 
				
			||||||
		if (!node) {
 | 
							if (!another) {
 | 
				
			||||||
			r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
								r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
				
			||||||
			r_error_str = "Path does not lead Node!";
 | 
								r_error_str = "Path does not lead Node!";
 | 
				
			||||||
			return 0;
 | 
								return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -535,7 +535,7 @@ public:
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					Node *another = node->get_node(node_path);
 | 
										Node *another = node->get_node(node_path);
 | 
				
			||||||
					if (!node) {
 | 
										if (!another) {
 | 
				
			||||||
						r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
											r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD;
 | 
				
			||||||
						r_error_str = "Path does not lead Node!";
 | 
											r_error_str = "Path does not lead Node!";
 | 
				
			||||||
						return 0;
 | 
											return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -116,16 +116,13 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
 | 
				
			||||||
	/** XLIB INITIALIZATION **/
 | 
						/** XLIB INITIALIZATION **/
 | 
				
			||||||
	x11_display = XOpenDisplay(NULL);
 | 
						x11_display = XOpenDisplay(NULL);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						char *modifiers = NULL;
 | 
				
			||||||
	Bool xkb_dar = False;
 | 
						Bool xkb_dar = False;
 | 
				
			||||||
	if (x11_display) {
 | 
						if (x11_display) {
 | 
				
			||||||
		XAutoRepeatOn(x11_display);
 | 
							XAutoRepeatOn(x11_display);
 | 
				
			||||||
		xkb_dar = XkbSetDetectableAutoRepeat(x11_display, True, NULL);
 | 
							xkb_dar = XkbSetDetectableAutoRepeat(x11_display, True, NULL);
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	char *modifiers = NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		// Try to support IME if detectable auto-repeat is supported
 | 
							// Try to support IME if detectable auto-repeat is supported
 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (xkb_dar == True) {
 | 
							if (xkb_dar == True) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Xutf8LookupString will be used later instead of XmbLookupString before
 | 
					// Xutf8LookupString will be used later instead of XmbLookupString before
 | 
				
			||||||
| 
						 | 
					@ -135,14 +132,13 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au
 | 
				
			||||||
			modifiers = XSetLocaleModifiers("");
 | 
								modifiers = XSetLocaleModifiers("");
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (modifiers == NULL) {
 | 
						if (modifiers == NULL) {
 | 
				
			||||||
		if (is_stdout_verbose()) {
 | 
							if (is_stdout_verbose()) {
 | 
				
			||||||
			WARN_PRINT("IME is disabled");
 | 
								WARN_PRINT("IME is disabled");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		modifiers = XSetLocaleModifiers("@im=none");
 | 
							modifiers = XSetLocaleModifiers("@im=none");
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if (modifiers == NULL) {
 | 
					 | 
				
			||||||
		WARN_PRINT("Error setting locale modifiers");
 | 
							WARN_PRINT("Error setting locale modifiers");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -58,6 +58,7 @@ Adapted from corresponding SDL 2.0 code.
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "core/error_macros.h"
 | 
				
			||||||
#include <dirent.h>
 | 
					#include <dirent.h>
 | 
				
			||||||
#include <fcntl.h>
 | 
					#include <fcntl.h>
 | 
				
			||||||
#include <sys/stat.h>
 | 
					#include <sys/stat.h>
 | 
				
			||||||
| 
						 | 
					@ -254,9 +255,9 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() {
 | 
				
			||||||
	this->power_state = POWERSTATE_UNKNOWN;
 | 
						this->power_state = POWERSTATE_UNKNOWN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dirp->change_dir(proc_acpi_battery_path);
 | 
						dirp->change_dir(proc_acpi_battery_path);
 | 
				
			||||||
	dirp->list_dir_begin();
 | 
						Error err = dirp->list_dir_begin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dirp == NULL) {
 | 
						if (err != OK) {
 | 
				
			||||||
		return false; /* can't use this interface. */
 | 
							return false; /* can't use this interface. */
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		node = dirp->get_next();
 | 
							node = dirp->get_next();
 | 
				
			||||||
| 
						 | 
					@ -268,8 +269,8 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dirp->change_dir(proc_acpi_ac_adapter_path);
 | 
						dirp->change_dir(proc_acpi_ac_adapter_path);
 | 
				
			||||||
	dirp->list_dir_begin();
 | 
						err = dirp->list_dir_begin();
 | 
				
			||||||
	if (dirp == NULL) {
 | 
						if (err != OK) {
 | 
				
			||||||
		return false; /* can't use this interface. */
 | 
							return false; /* can't use this interface. */
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		node = dirp->get_next();
 | 
							node = dirp->get_next();
 | 
				
			||||||
| 
						 | 
					@ -438,9 +439,9 @@ bool PowerX11::GetPowerInfo_Linux_sys_class_power_supply(/*PowerState *state, in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DirAccess *dirp = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
 | 
						DirAccess *dirp = DirAccess::create(DirAccess::ACCESS_FILESYSTEM);
 | 
				
			||||||
	dirp->change_dir(base);
 | 
						dirp->change_dir(base);
 | 
				
			||||||
	dirp->list_dir_begin();
 | 
						Error err = dirp->list_dir_begin();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!dirp) {
 | 
						if (err != OK) {
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -215,8 +215,8 @@ void TextEdit::Text::_update_line_cache(int p_line) const {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Map<int, TextEdit::Text::ColorRegionInfo> &TextEdit::Text::get_color_region_info(int p_line) {
 | 
					const Map<int, TextEdit::Text::ColorRegionInfo> &TextEdit::Text::get_color_region_info(int p_line) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Map<int, ColorRegionInfo> *cri = NULL;
 | 
						static Map<int, ColorRegionInfo> cri;
 | 
				
			||||||
	ERR_FAIL_INDEX_V(p_line, text.size(), *cri); //enjoy your crash
 | 
						ERR_FAIL_INDEX_V(p_line, text.size(), cri);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (text[p_line].width_cache == -1) {
 | 
						if (text[p_line].width_cache == -1) {
 | 
				
			||||||
		_update_line_cache(p_line);
 | 
							_update_line_cache(p_line);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2868,8 +2868,8 @@ TreeItem *Tree::create_item(TreeItem *p_parent) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	TreeItem *ti = memnew(TreeItem(this));
 | 
						TreeItem *ti = memnew(TreeItem(this));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ti->cells.resize(columns.size());
 | 
					 | 
				
			||||||
	ERR_FAIL_COND_V(!ti, NULL);
 | 
						ERR_FAIL_COND_V(!ti, NULL);
 | 
				
			||||||
 | 
						ti->cells.resize(columns.size());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (p_parent) {
 | 
						if (p_parent) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,17 +30,14 @@
 | 
				
			||||||
#include "broad_phase_basic.h"
 | 
					#include "broad_phase_basic.h"
 | 
				
			||||||
#include "list.h"
 | 
					#include "list.h"
 | 
				
			||||||
#include "print_string.h"
 | 
					#include "print_string.h"
 | 
				
			||||||
BroadPhaseSW::ID BroadPhaseBasic::create(CollisionObjectSW *p_object_, int p_subindex) {
 | 
					BroadPhaseSW::ID BroadPhaseBasic::create(CollisionObjectSW *p_object, int p_subindex) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (p_object_ == NULL) {
 | 
						ERR_FAIL_COND_V(p_object == NULL, NULL);
 | 
				
			||||||
 | 
					 | 
				
			||||||
		ERR_FAIL_COND_V(p_object_ == NULL, 0);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	current++;
 | 
						current++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Element e;
 | 
						Element e;
 | 
				
			||||||
	e.owner = p_object_;
 | 
						e.owner = p_object;
 | 
				
			||||||
	e._static = false;
 | 
						e._static = false;
 | 
				
			||||||
	e.subindex = p_subindex;
 | 
						e.subindex = p_subindex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1099,15 +1099,17 @@ void VisualServerCanvas::canvas_light_occluder_set_polygon(RID p_occluder, RID p
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (occluder->polygon.is_valid()) {
 | 
						if (occluder->polygon.is_valid()) {
 | 
				
			||||||
		LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.get(p_polygon);
 | 
							LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.get(p_polygon);
 | 
				
			||||||
		if (!occluder_poly)
 | 
							if (!occluder_poly) {
 | 
				
			||||||
			occluder->polygon = RID();
 | 
								occluder->polygon = RID();
 | 
				
			||||||
			ERR_FAIL_COND(!occluder_poly);
 | 
								ERR_FAIL_COND(!occluder_poly);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
			occluder_poly->owners.insert(occluder);
 | 
								occluder_poly->owners.insert(occluder);
 | 
				
			||||||
			occluder->polygon_buffer = occluder_poly->occluder;
 | 
								occluder->polygon_buffer = occluder_poly->occluder;
 | 
				
			||||||
			occluder->aabb_cache = occluder_poly->aabb;
 | 
								occluder->aabb_cache = occluder_poly->aabb;
 | 
				
			||||||
			occluder->cull_cache = occluder_poly->cull_mode;
 | 
								occluder->cull_cache = occluder_poly->cull_mode;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
void VisualServerCanvas::canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform) {
 | 
					void VisualServerCanvas::canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.get(p_occluder);
 | 
						RasterizerCanvas::LightOccluderInstance *occluder = canvas_light_occluder_owner.get(p_occluder);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1482,12 +1482,11 @@ void VisualServerScene::_render_scene(const Transform p_cam_transform, const Cam
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (light && p_shadow_atlas.is_valid() && VSG::storage->light_has_shadow(E->get()->base)) {
 | 
								if (light && p_shadow_atlas.is_valid() && VSG::storage->light_has_shadow(E->get()->base)) {
 | 
				
			||||||
				lights_with_shadow[directional_shadow_count++] = E->get();
 | 
									lights_with_shadow[directional_shadow_count++] = E->get();
 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
				//add to list
 | 
									//add to list
 | 
				
			||||||
 | 
					 | 
				
			||||||
				directional_light_ptr[directional_light_count++] = light->instance;
 | 
									directional_light_ptr[directional_light_count++] = light->instance;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		VSG::scene_render->set_directional_shadow_count(directional_shadow_count);
 | 
							VSG::scene_render->set_directional_shadow_count(directional_shadow_count);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue