Skip to content

Commit c4ae265

Browse files
committed
bug fix
1 parent 5005eab commit c4ae265

File tree

2 files changed

+16
-15
lines changed

2 files changed

+16
-15
lines changed

ipdb/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
:copyright: ©2018 by IPIP.net
44
"""
55

6+
67
from .database import Reader

ipdb/database.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,23 @@ class Reader:
1616
_meta = {}
1717
data = b""
1818

19-
file = False
20-
file_size = 0
19+
_file_size = 0
2120

2221
_v4offset = 0
2322
_v6offsetCache = {}
2423

2524
def __init__(self, name):
26-
self.file = open(name, "rb")
27-
self.data = self.file.read()
28-
self.file_size = len(self.data)
25+
file = open(name, "rb")
26+
self.data = file.read()
27+
self._file_size = len(self.data)
2928

3029
meta_length = bytes2long(self.data[0], self.data[1], self.data[2], self.data[3])
3130
meta = json.loads(self.data[4:meta_length+4])
3231

3332
self._meta = MetaData(**meta)
3433
if len(self._meta.languages) == 0 or len(self._meta.fields) == 0:
3534
raise DatabaseError("database meta error")
36-
if self.file_size != (4 + meta_length + self._meta.total_size):
35+
if self._file_size != (4 + meta_length + self._meta.total_size):
3736
raise DatabaseError("database size error")
3837

3938
self.data = self.data[4+meta_length:]
@@ -49,7 +48,7 @@ def _find_node(self, ip):
4948
else:
5049
bit_count = 32
5150

52-
i = 0
51+
idx = 0
5352
node = 0
5453
key = ip.packed[0:2]
5554
if bit_count == 32:
@@ -67,27 +66,28 @@ def _find_node(self, ip):
6766
else:
6867
val = self._v6offsetCache.get(key, -1)
6968
if val > -1:
70-
i = 16
69+
idx = 16
7170
node = val
7271

73-
while i < bit_count:
72+
while idx < bit_count:
7473
if node > self._meta.node_count:
7574
break
76-
node = self._read_node(node, (1 & (ip.packed[i >> 3] >> 7 - (i % 8))))
77-
i += 1
78-
if i == 16:
75+
node = self._read_node(node, (1 & (ip.packed[idx >> 3] >> 7 - (idx % 8))))
76+
idx += 1
77+
if idx == 16:
7978
self._v6offsetCache[key] = node
80-
79+
8180
if node > self._meta.node_count:
8281
return node
8382
elif node == self._meta.node_count:
8483
return 0
85-
86-
return None
84+
raise DatabaseError("database is error")
8785

8886
def _resolve(self, node):
8987
resolved = node - self._meta.node_count + self._meta.node_count * 8
9088
size = bytes2long(0, 0, self.data[resolved], self.data[resolved + 1])
89+
if (resolved+2+size) > len(self.data):
90+
raise DatabaseError("database is error")
9191
return self.data[resolved+2:resolved+2+size]
9292

9393
def find(self, addr, language = "CN"):

0 commit comments

Comments
 (0)