@@ -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