--- Convert-BER-XS/XS.pm 2019/04/25 22:30:21 1.57 +++ Convert-BER-XS/XS.pm 2019/04/27 14:54:40 1.58 @@ -475,20 +475,21 @@ # decodes REAL values according to ECMA-63 # this is pretty strict, except it doesn't catch -0. +# I don't have access to ISO 6093 (or BS 6727, or ANSI X.3-42)), so this is all guesswork. sub _decode_real_decimal { my ($format, $val) = @_; - $val =~ y/,/./; + $val =~ y/,/./; # probably not in ISO-6093 if ($format == 1) { $val =~ /^ \ * [+-]? [0-9]+ \z/x - or Carp::croak "BER_TYPE_REAL NR1 value not in NR1 format ($val) (X.690 8.5.8, ECMA-63)"; + or Carp::croak "BER_TYPE_REAL NR1 value not in NR1 format ($val) (X.690 8.5.8)"; } elsif ($format == 2) { $val =~ /^ \ * [+-]? (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) \z/x - or Carp::croak "BER_TYPE_REAL NR2 value not in NR2 format ($val) (X.690 8.5.8, ECMA-63)"; + or Carp::croak "BER_TYPE_REAL NR2 value not in NR2 format ($val) (X.690 8.5.8)"; } elsif ($format == 3) { - $val =~ /^ \ * [+-] (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) E [+-][0-9]+ \z/x - or Carp::croak "BER_TYPE_REAL NR3 value not in NR3 format ($val) (X.690 8.5.8, ECMA-63)"; + $val =~ /^ \ * [+-] (?: [0-9]+\.[0-9]* | [0-9]*\.[0-9]+ ) [eE] [+-]? [0-9]+ \z/x + or Carp::croak "BER_TYPE_REAL NR3 value not in NR3 format ($val) (X.690 8.5.8)"; } else { Carp::croak "BER_TYPE_REAL illegal decimal numerical representation format $format"; }