[Freeipa-devel] [PATCH] 275 Do not crash in Decimal parameter conversion

Rob Crittenden rcritten at redhat.com
Fri Jun 8 02:38:51 UTC 2012


Martin Kosek wrote:
> When invalid data is passed, an unhandled decimal exception could
> be raised in Decimal number conversion. Handle the exception
> more gracefully and report proper ipalib.errors.ConversionError.
>
> https://fedorahosted.org/freeipa/ticket/2705

I'm being pedantic but I think the Decimal special values need to be 
handled better. Using Infinity returns a rather odd message:

$ ipa dnsrecord-add example.com
Record name: foo
Please choose a type of DNS resource record to be added
The most common types for this type of zone are: A, AAAA

DNS resource record type: LOC
LOC Degrees Latitude: 90
[LOC Minutes Latitude]: 59
[LOC Seconds Latitude]: 
999999999999999999999999999999999999999999999999999999999999999999999
 >>> LOC Seconds Latitude: quantize result has too many digits for 
current context
[LOC Seconds Latitude]: Infinity
 >>> LOC Seconds Latitude: quantize with one INF

And using NaN raises an unhandled exception:

[LOC Seconds Latitude]: NaN
ipa: ERROR: InvalidOperation: comparison involving NaN
Traceback (most recent call last):
   File "/home/rcrit/redhat/freeipa/ipalib/cli.py", line 1263, in run
     sys.exit(api.Backend.cli.run(argv))
   File "/home/rcrit/redhat/freeipa/ipalib/cli.py", line 1049, in run
     kw = self.argv_to_keyword_arguments(cmd, argv[1:])
   File "/home/rcrit/redhat/freeipa/ipalib/cli.py", line 1035, in 
argv_to_keyword_arguments
     self.prompt_interactively(cmd, kw)
   File "/home/rcrit/redhat/freeipa/ipalib/cli.py", line 1199, in 
prompt_interactively
     callback(kw)
   File "/home/rcrit/redhat/freeipa/ipalib/plugins/dns.py", line 2147, 
in interactive_prompt_callback
     user_options = param.prompt_parts(self.Backend)
   File "/home/rcrit/redhat/freeipa/ipalib/plugins/dns.py", line 768, in 
prompt_parts
     self.__get_part_param(backend, part, user_options, default)
   File "/home/rcrit/redhat/freeipa/ipalib/plugins/dns.py", line 747, in 
__get_part_param
     output_kw[name] = part(raw)
   File "/home/rcrit/redhat/freeipa/ipalib/parameters.py", line 556, in 
__call__
     self.validate(value, supplied=self.name in kw)
   File "/home/rcrit/redhat/freeipa/ipalib/parameters.py", line 879, in 
validate
     self._validate_scalar(value)
   File "/home/rcrit/redhat/freeipa/ipalib/parameters.py", line 893, in 
_validate_scalar
     error = rule(ugettext, value)
   File "/home/rcrit/redhat/freeipa/ipalib/parameters.py", line 1244, in 
_rule_minvalue
     if value < self.minvalue:
   File "/usr/lib64/python2.7/decimal.py", line 884, in __lt__
     ans = self._compare_check_nans(other, context)
   File "/usr/lib64/python2.7/decimal.py", line 786, in _compare_check_nans
     self)
   File "/usr/lib64/python2.7/decimal.py", line 3866, in _raise_error
     raise error(explanation)
InvalidOperation: comparison involving NaN
ipa: ERROR: an internal error has occurred

Otherwise it does what it should.

rob




More information about the Freeipa-devel mailing list