From 4ac4e69f8febeb24584c0025fdc4c36138da3962 Mon Sep 17 00:00:00 2001 From: Ben Agricola Date: Fri, 8 Sep 2017 17:16:36 +0100 Subject: [PATCH] Check search returned entry before trying to index key Signed-off-by: Ben Agricola --- src/lib/lpm/lpm4.lua | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/lpm/lpm4.lua b/src/lib/lpm/lpm4.lua index 3c1d393f64..081775c495 100644 --- a/src/lib/lpm/lpm4.lua +++ b/src/lib/lpm/lpm4.lua @@ -41,7 +41,9 @@ function LPM4:search_entry_string (ip) return self:search_entry(ip4.parse(ip)) end function LPM4:search (ip) - return self:search_entry(ip).key + local entry = self:search_entry(ip) + if entry then return entry.key end + return nil end function LPM4:search_string (str) return self:search(ip4.parse(str)) @@ -233,7 +235,11 @@ function selftest () s:add_string("10.0.0.0/24", 10) s:add_string("0.0.0.10/32", 11) assert(10 == s:search_bytes(ffi.new("uint8_t[4]", {10,0,0,0}))) + assert(10 == s:search_bytes(ffi.new("uint8_t[4]", {10,0,0,124}))) assert(11 == s:search_bytes(ffi.new("uint8_t[4]", {0,0,0,10}))) + + -- Search for non-existent entry should return nil + assert(nil == s:search_bytes(ffi.new("uint8_t[4]", {10,0,1,0}))) end function LPM4:selftest (cfg, millions) assert(self, "selftest must be called with : ")