From f5afe784c5b6c6850f827fad30a0ba1898e04cbf Mon Sep 17 00:00:00 2001 From: Dmitriy Ryajov Date: Mon, 12 Sep 2022 21:08:55 -0600 Subject: [PATCH] prevent npe when table is 0 --- libp2pdht/private/eth/p2p/discoveryv5/lru.nim | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libp2pdht/private/eth/p2p/discoveryv5/lru.nim b/libp2pdht/private/eth/p2p/discoveryv5/lru.nim index 3d6bdad..6fbfdf6 100644 --- a/libp2pdht/private/eth/p2p/discoveryv5/lru.nim +++ b/libp2pdht/private/eth/p2p/discoveryv5/lru.nim @@ -11,6 +11,7 @@ type capacity: int func init*[K, V](T: type LRUCache[K, V], capacity: int): LRUCache[K, V] = + doAssert capacity > 0, "Capacity should be greater than 0!" LRUCache[K, V](capacity: capacity) # Table and list init is done default func get*[K, V](lru: var LRUCache[K, V], key: K): Option[V] = @@ -27,7 +28,7 @@ func put*[K, V](lru: var LRUCache[K, V], key: K, value: V) = if not node.isNil: lru.list.remove(node) else: - if lru.table.len >= lru.capacity: + if lru.len > 0 and lru.table.len >= lru.capacity: lru.table.del(lru.list.tail.value[0]) lru.list.remove(lru.list.tail) @@ -43,10 +44,13 @@ func len*[K, V](lru: LRUCache[K, V]): int = lru.table.len proc contains*[K, V](lru: LRUCache[K, V], k: K): bool = + ## Check for cached item - this doesn't touch the cache + ## + k in lru.table iterator items*[K, V](lru: LRUCache[K, V]): V = - ## This will not increment LRU/MRU access stats + ## Get cached items - this doesn't touch the cache ## for item in lru.list: