Closed rooterkyberian closed 6 years ago
Steps to reproduce:
monero.address.Address('41tjz19p4qc2gudqnwsdrhgcgxud8bgxy84ufe869nyw7ywbxw9s9gqbix7piu9d7qjvbjtrdnbubhcf663ydq3bsxj1brL')
Expected: ValueError Got: TypeError
ValueError
TypeError
The problem seems to be that monero.base58.decode_block returns strings for errors instead of raising ValueErrors.
monero.base58.decode_block
In [1]: import monero.address In [2]: monero.address.Address('41tjz19p4qc2gudqnwsdrhgcgxud8bgxy84ufe869nyw7ywbxw9s9gqbix7piu ...: 9d7qjvbjtrdnbubhcf663ydq3bsxj1brL') TypeError Traceback (most recent call last) <ipython-input-5-8987b1372f1f> in <module>() ----> 1 monero.address.Address('41tjz19p4qc2gudqnwsdrhgcgxud8bgxy84ufe869nyw7ywbxw9s9gqbix7piu9d7qjvbjtrdnbubhcf663ydq3bsxj1brL') venv/lib/python3.6/site-packages/monero/address.py in __init__(self, addr, label) 28 raise ValueError("Address must be 95 characters long base58-encoded string, " 29 "is {addr} ({len} chars length)".format(addr=addr, len=len(addr))) ---> 30 self._decode(addr) 31 self.label = label or self.label 32 venv/lib/python3.6/site-packages/monero/address.py in _decode(self, address) 32 33 def _decode(self, address): ---> 34 self._decoded = bytearray(unhexlify(base58.decode(address))) 35 checksum = self._decoded[-4:] 36 if checksum != keccak_256(self._decoded[:-4]).digest()[:4]: venv/lib/python3.6/site-packages/monero/base58.py in decode(enc) 161 data = [0] * data_size 162 for i in range(full_block_count): --> 163 data = decode_block(enc[(i*__fullEncodedBlockSize):(i*__fullEncodedBlockSize+__fullEncodedBlockSize)], data, i * __fullBlockSize) 164 165 if last_block_size > 0: venv/lib/python3.6/site-packages/monero/base58.py in decode_block(data, buf, index) 138 tmp_buf = _uint64_to_8be(res_num, res_size) 139 for i in range(len(tmp_buf)): --> 140 buf[i+index] = tmp_buf[i] 141 142 return buf TypeError: 'str' object does not support item assignment
That commit fixes this particular bug but proper test coverage for base58.py possible errors is still needed.
base58.py
thanks for quick fix!
Steps to reproduce:
monero.address.Address('41tjz19p4qc2gudqnwsdrhgcgxud8bgxy84ufe869nyw7ywbxw9s9gqbix7piu9d7qjvbjtrdnbubhcf663ydq3bsxj1brL')
Expected:
ValueError
Got:TypeError
The problem seems to be that
monero.base58.decode_block
returns strings for errors instead of raising ValueErrors.