util: check bip21 url for amount
This commit is contained in:
@@ -872,7 +872,7 @@ class InvalidBitcoinURI(Exception): pass
|
|||||||
def parse_URI(uri: str, on_pr: Callable = None, *, loop=None) -> dict:
|
def parse_URI(uri: str, on_pr: Callable = None, *, loop=None) -> dict:
|
||||||
"""Raises InvalidBitcoinURI on malformed URI."""
|
"""Raises InvalidBitcoinURI on malformed URI."""
|
||||||
from . import bitcoin
|
from . import bitcoin
|
||||||
from .bitcoin import COIN
|
from .bitcoin import COIN, TOTAL_COIN_SUPPLY_LIMIT_IN_BTC
|
||||||
|
|
||||||
if not isinstance(uri, str):
|
if not isinstance(uri, str):
|
||||||
raise InvalidBitcoinURI(f"expected string, not {repr(uri)}")
|
raise InvalidBitcoinURI(f"expected string, not {repr(uri)}")
|
||||||
@@ -912,6 +912,8 @@ def parse_URI(uri: str, on_pr: Callable = None, *, loop=None) -> dict:
|
|||||||
amount = Decimal(m.group(1)) * pow(Decimal(10), k)
|
amount = Decimal(m.group(1)) * pow(Decimal(10), k)
|
||||||
else:
|
else:
|
||||||
amount = Decimal(am) * COIN
|
amount = Decimal(am) * COIN
|
||||||
|
if amount > TOTAL_COIN_SUPPLY_LIMIT_IN_BTC * COIN:
|
||||||
|
raise InvalidBitcoinURI(f"amount is out-of-bounds: {amount!r} BTC")
|
||||||
out['amount'] = int(amount)
|
out['amount'] = int(amount)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
raise InvalidBitcoinURI(f"failed to parse 'amount' field: {repr(e)}") from e
|
raise InvalidBitcoinURI(f"failed to parse 'amount' field: {repr(e)}") from e
|
||||||
|
|||||||
Reference in New Issue
Block a user