From 7a07895920196c00d1ee14187e4ccdb2a6f0d0b9 Mon Sep 17 00:00:00 2001 From: "Wilson E. Alvarez" Date: Fri, 25 Aug 2017 11:14:33 -0400 Subject: [PATCH] Added/Fixed null pointer checks --- drivers/gles3/rasterizer_gles3.cpp | 5 +---- editor/animation_editor.cpp | 2 +- editor/editor_settings.cpp | 4 ++-- editor/plugins/canvas_item_editor_plugin.cpp | 2 +- modules/visual_script/visual_script_func_nodes.cpp | 6 +++--- modules/visual_script/visual_script_nodes.cpp | 2 +- .../visual_script/visual_script_yield_nodes.cpp | 2 +- platform/x11/os_x11.cpp | 14 +++++--------- platform/x11/power_x11.cpp | 13 +++++++------ scene/gui/text_edit.cpp | 4 ++-- scene/gui/tree.cpp | 2 +- servers/physics/broad_phase_basic.cpp | 9 +++------ servers/visual/visual_server_canvas.cpp | 14 ++++++++------ servers/visual/visual_server_scene.cpp | 7 +++---- 14 files changed, 39 insertions(+), 47 deletions(-) diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp index e025992c0b2..274782c997e 100644 --- a/drivers/gles3/rasterizer_gles3.cpp +++ b/drivers/gles3/rasterizer_gles3.cpp @@ -247,11 +247,8 @@ void RasterizerGLES3::set_current_render_target(RID p_render_target) { if (p_render_target.is_valid()) { 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; + ERR_FAIL_COND(!rt); storage->frame.clear_request = false; glViewport(0, 0, rt->width, rt->height); diff --git a/editor/animation_editor.cpp b/editor/animation_editor.cpp index 55542a59a29..5b24baabea8 100644 --- a/editor/animation_editor.cpp +++ b/editor/animation_editor.cpp @@ -1646,7 +1646,7 @@ PropertyInfo AnimationKeyEditor::_find_hint_for_track(int p_idx, NodePath &r_bas List pinfo; if (res.is_valid()) res->get_property_list(&pinfo); - else + else if (node) node->get_property_list(&pinfo); for (List::Element *E = pinfo.front(); E; E = E->next()) { diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 5b73d836910..f8c37d586d3 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -253,8 +253,8 @@ static void _create_script_templates(const String &p_path) { dir->change_dir(p_path); for (int i = 0; i < keys.size(); i++) { if (!dir->file_exists(keys[i])) { - file->reopen(p_path.plus_file((String)keys[i]), FileAccess::WRITE); - ERR_FAIL_COND(!file); + Error err = file->reopen(p_path.plus_file((String)keys[i]), FileAccess::WRITE); + ERR_FAIL_COND(err != OK); file->store_string(templates[keys[i]]); file->close(); } diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp index 0dcabb1776b..433145a2ee8 100644 --- a/editor/plugins/canvas_item_editor_plugin.cpp +++ b/editor/plugins/canvas_item_editor_plugin.cpp @@ -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) { child->set_name(path.get_file().get_basename()); - Ref texture = Object::cast_to(Ref(ResourceCache::get(path)).ptr()); + Ref texture = Ref(Object::cast_to(ResourceCache::get(path))); Size2 texture_size = texture->get_size(); editor_data->get_undo_redo().add_do_method(parent, "add_child", child); diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp index 32f5945a10d..b51ef6beef8 100644 --- a/modules/visual_script/visual_script_func_nodes.cpp +++ b/modules/visual_script/visual_script_func_nodes.cpp @@ -822,7 +822,7 @@ public: } Node *another = node->get_node(node_path); - if (!node) { + if (!another) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = "Path does not lead Node!"; return 0; @@ -1596,7 +1596,7 @@ public: } Node *another = node->get_node(node_path); - if (!node) { + if (!another) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = "Path does not lead Node!"; return 0; @@ -2241,7 +2241,7 @@ public: } Node *another = node->get_node(node_path); - if (!node) { + if (!another) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = RTR("Path does not lead Node!"); return 0; diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp index 0d65638bb9d..5e74c970e35 100644 --- a/modules/visual_script/visual_script_nodes.cpp +++ b/modules/visual_script/visual_script_nodes.cpp @@ -2087,7 +2087,7 @@ public: } Node *another = node->get_node(path); - if (!node) { + if (!another) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = "Path does not lead Node!"; return 0; diff --git a/modules/visual_script/visual_script_yield_nodes.cpp b/modules/visual_script/visual_script_yield_nodes.cpp index 958eacf2f29..08adc13193c 100644 --- a/modules/visual_script/visual_script_yield_nodes.cpp +++ b/modules/visual_script/visual_script_yield_nodes.cpp @@ -535,7 +535,7 @@ public: } Node *another = node->get_node(node_path); - if (!node) { + if (!another) { r_error.error = Variant::CallError::CALL_ERROR_INVALID_METHOD; r_error_str = "Path does not lead Node!"; return 0; diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp index dbc3914410f..7e712ee3257 100644 --- a/platform/x11/os_x11.cpp +++ b/platform/x11/os_x11.cpp @@ -116,24 +116,22 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au /** XLIB INITIALIZATION **/ x11_display = XOpenDisplay(NULL); + char *modifiers = NULL; Bool xkb_dar = False; if (x11_display) { XAutoRepeatOn(x11_display); xkb_dar = XkbSetDetectableAutoRepeat(x11_display, True, NULL); - } - char *modifiers = NULL; - - // Try to support IME if detectable auto-repeat is supported - - if (xkb_dar == True) { + // Try to support IME if detectable auto-repeat is supported + if (xkb_dar == True) { // Xutf8LookupString will be used later instead of XmbLookupString before // the multibyte sequences can be converted to unicode string. #ifdef X_HAVE_UTF8_STRING - modifiers = XSetLocaleModifiers(""); + modifiers = XSetLocaleModifiers(""); #endif + } } if (modifiers == NULL) { @@ -141,8 +139,6 @@ void OS_X11::initialize(const VideoMode &p_desired, int p_video_driver, int p_au WARN_PRINT("IME is disabled"); } modifiers = XSetLocaleModifiers("@im=none"); - } - if (modifiers == NULL) { WARN_PRINT("Error setting locale modifiers"); } diff --git a/platform/x11/power_x11.cpp b/platform/x11/power_x11.cpp index 8e69a2223f8..72fa5cf380e 100644 --- a/platform/x11/power_x11.cpp +++ b/platform/x11/power_x11.cpp @@ -58,6 +58,7 @@ Adapted from corresponding SDL 2.0 code. #include #include +#include "core/error_macros.h" #include #include #include @@ -254,9 +255,9 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() { this->power_state = POWERSTATE_UNKNOWN; 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. */ } else { node = dirp->get_next(); @@ -268,8 +269,8 @@ bool PowerX11::GetPowerInfo_Linux_proc_acpi() { } dirp->change_dir(proc_acpi_ac_adapter_path); - dirp->list_dir_begin(); - if (dirp == NULL) { + err = dirp->list_dir_begin(); + if (err != OK) { return false; /* can't use this interface. */ } else { 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); dirp->change_dir(base); - dirp->list_dir_begin(); + Error err = dirp->list_dir_begin(); - if (!dirp) { + if (err != OK) { return false; } diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp index 2c50b4e8542..6e7d1eb8a9a 100644 --- a/scene/gui/text_edit.cpp +++ b/scene/gui/text_edit.cpp @@ -215,8 +215,8 @@ void TextEdit::Text::_update_line_cache(int p_line) const { const Map &TextEdit::Text::get_color_region_info(int p_line) { - Map *cri = NULL; - ERR_FAIL_INDEX_V(p_line, text.size(), *cri); //enjoy your crash + static Map cri; + ERR_FAIL_INDEX_V(p_line, text.size(), cri); if (text[p_line].width_cache == -1) { _update_line_cache(p_line); diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index 20bf818d449..f4e1bff9af6 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -2868,8 +2868,8 @@ TreeItem *Tree::create_item(TreeItem *p_parent) { TreeItem *ti = memnew(TreeItem(this)); - ti->cells.resize(columns.size()); ERR_FAIL_COND_V(!ti, NULL); + ti->cells.resize(columns.size()); if (p_parent) { diff --git a/servers/physics/broad_phase_basic.cpp b/servers/physics/broad_phase_basic.cpp index 05a2e1fdf84..5a54e1f0d95 100644 --- a/servers/physics/broad_phase_basic.cpp +++ b/servers/physics/broad_phase_basic.cpp @@ -30,17 +30,14 @@ #include "broad_phase_basic.h" #include "list.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, 0); - } + ERR_FAIL_COND_V(p_object == NULL, NULL); current++; Element e; - e.owner = p_object_; + e.owner = p_object; e._static = false; e.subindex = p_subindex; diff --git a/servers/visual/visual_server_canvas.cpp b/servers/visual/visual_server_canvas.cpp index 13517fa4090..931e0842467 100644 --- a/servers/visual/visual_server_canvas.cpp +++ b/servers/visual/visual_server_canvas.cpp @@ -1099,13 +1099,15 @@ void VisualServerCanvas::canvas_light_occluder_set_polygon(RID p_occluder, RID p if (occluder->polygon.is_valid()) { LightOccluderPolygon *occluder_poly = canvas_light_occluder_polygon_owner.get(p_polygon); - if (!occluder_poly) + if (!occluder_poly) { occluder->polygon = RID(); - ERR_FAIL_COND(!occluder_poly); - occluder_poly->owners.insert(occluder); - occluder->polygon_buffer = occluder_poly->occluder; - occluder->aabb_cache = occluder_poly->aabb; - occluder->cull_cache = occluder_poly->cull_mode; + ERR_FAIL_COND(!occluder_poly); + } else { + occluder_poly->owners.insert(occluder); + occluder->polygon_buffer = occluder_poly->occluder; + occluder->aabb_cache = occluder_poly->aabb; + occluder->cull_cache = occluder_poly->cull_mode; + } } } void VisualServerCanvas::canvas_light_occluder_set_transform(RID p_occluder, const Transform2D &p_xform) { diff --git a/servers/visual/visual_server_scene.cpp b/servers/visual/visual_server_scene.cpp index fc9583d7931..a0c74202702 100644 --- a/servers/visual/visual_server_scene.cpp +++ b/servers/visual/visual_server_scene.cpp @@ -1482,11 +1482,10 @@ 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)) { lights_with_shadow[directional_shadow_count++] = E->get(); + + //add to list + directional_light_ptr[directional_light_count++] = light->instance; } - - //add to list - - directional_light_ptr[directional_light_count++] = light->instance; } VSG::scene_render->set_directional_shadow_count(directional_shadow_count);