From 96011bc71816b5e9eb2cc6c86f009198dfb1146c Mon Sep 17 00:00:00 2001 From: Anthony Zhang Date: Sat, 22 Jun 2013 15:43:58 -0400 Subject: Audit code for possible nil value indexing with unregistered nodes. --- mesecons_extrawires/depends.txt | 1 + mesecons_extrawires/vertical.lua | 32 ++++++++++++-------------------- 2 files changed, 13 insertions(+), 20 deletions(-) (limited to 'mesecons_extrawires') diff --git a/mesecons_extrawires/depends.txt b/mesecons_extrawires/depends.txt index acaa924..aca967d 100644 --- a/mesecons_extrawires/depends.txt +++ b/mesecons_extrawires/depends.txt @@ -1 +1,2 @@ +default mesecons diff --git a/mesecons_extrawires/vertical.lua b/mesecons_extrawires/vertical.lua index 39b5417..3274c1a 100644 --- a/mesecons_extrawires/vertical.lua +++ b/mesecons_extrawires/vertical.lua @@ -34,31 +34,23 @@ local brules = local vertical_updatepos = function (pos) local node = minetest.env:get_node(pos) - if minetest.registered_nodes[node.name].is_vertical_conductor then + if minetest.registered_nodes[node.name] + and minetest.registered_nodes[node.name].is_vertical_conductor then local node_above = minetest.env:get_node(mesecon:addPosRule(pos, vrules[1])) local node_below = minetest.env:get_node(mesecon:addPosRule(pos, vrules[2])) local namestate = minetest.registered_nodes[node.name].vertical_conductor_state - -- above and below: vertical mesecon - if minetest.registered_nodes[node_above.name].is_vertical_conductor - and minetest.registered_nodes[node_below.name].is_vertical_conductor then - minetest.env:add_node (pos, - {name = "mesecons_extrawires:vertical_"..namestate}) - - -- above only: bottom - elseif minetest.registered_nodes[node_above.name].is_vertical_conductor - and not minetest.registered_nodes[node_below.name].is_vertical_conductor then - minetest.env:add_node (pos, - {name = "mesecons_extrawires:vertical_bottom_"..namestate}) - - -- below only: top - elseif not minetest.registered_nodes[node_above.name].is_vertical_conductor - and minetest.registered_nodes[node_below.name].is_vertical_conductor then - minetest.env:add_node (pos, - {name = "mesecons_extrawires:vertical_top_"..namestate}) + local above = minetest.registered_nodes[node_above.name] and minetest.registered_nodes[node_above.name].is_vertical_conductor + local below = minetest.registered_nodes[node_below.name] and minetest.registered_nodes[node_below.name].is_vertical_conductor + + if above and below then -- above and below: vertical mesecon + minetest.env:add_node(pos, {name = "mesecons_extrawires:vertical_"..namestate}) + elseif above and not below then -- above only: bottom + minetest.env:add_node(pos, {name = "mesecons_extrawires:vertical_bottom_"..namestate}) + elseif not above and below then -- below only: top + minetest.env:add_node(pos, {name = "mesecons_extrawires:vertical_top_"..namestate}) else -- no vertical wire above, no vertical wire below: use default wire - minetest.env:add_node (pos, - {name = "mesecons_extrawires:vertical_"..namestate}) + minetest.env:add_node (pos, {name = "mesecons_extrawires:vertical_"..namestate}) end end end -- cgit v1.2.3