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

Martin Kosek mkosek at redhat.com
Wed Jun 13 14:49:01 UTC 2012


On Thu, 2012-06-07 at 22:38 -0400, Rob Crittenden wrote:
> 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

Thanks for being pedantic, I found out that Decimal number validation
and normalization needs more care, dnsrecord-add would also fail with
values such as "1E4" or "-0".

Attached patch improves Decimal number validation a lot and adds
optional exponent normalization. I also added missing tests for all
Decimal Parameter attributes.

Martin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: freeipa-mkosek-275-2-decimal-parameter-conversion-and-normalization.patch
Type: text/x-patch
Size: 9394 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/freeipa-devel/attachments/20120613/2758c239/attachment.bin>


More information about the Freeipa-devel mailing list