fix infinite loop with empty comma
authorTony Cook <tony@develop-help.com>
Wed, 19 Dec 2018 23:59:23 +0000 (10:59 +1100)
committerTony Cook <tony@develop-help.com>
Wed, 19 Dec 2018 23:59:23 +0000 (10:59 +1100)
MANIFEST
site/cgi-bin/modules/BSE/Util/Format.pm
t/010-modules/110-number.t [new file with mode: 0644]

index 56c070a..efc039b 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -906,6 +906,7 @@ t/010-modules/070-escape.t
 t/010-modules/080-cfg.t
 t/010-modules/090-subcalc.t
 t/010-modules/100-password-validate.t
+t/010-modules/110-number.t
 t/020-templater/000-load.t
 t/020-templater/010-token.t
 t/020-templater/020-parse.t
index 7e5c3ad..8bb5949 100644 (file)
@@ -1,7 +1,7 @@
 package BSE::Util::Format;
 use strict;
 
-our $VERSION = "1.001";
+our $VERSION = "1.002";
 
 =head1 NAME
 
@@ -85,7 +85,7 @@ sub bse_number {
   my $formatted = $places < 0 ? $div_value : sprintf("%.*f", $places, $div_value);
 
   my ($int, $frac) = split /\./, $formatted;
-  if ($commify && $int >= $comma_limit) {
+  if ($commify && $int >= $comma_limit && $comma_sep ne "") {
     1 while $int =~ s/([0-9])([0-9][0-9][0-9]\b)/$1$comma_sep$2/;
   }
 
diff --git a/t/010-modules/110-number.t b/t/010-modules/110-number.t
new file mode 100644 (file)
index 0000000..5ec245d
--- /dev/null
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use BSE::Util::Format qw(bse_number);
+use BSE::Cfg;
+use Test::More;
+
+{
+  my $cfg = BSE::Cfg->new_from_text(text => <<CFG);
+[number money]
+comma=,
+divisor=100
+places=2
+CFG
+  is(BSE::Util::Format::bse_number("money", 1_000_000, $cfg), "10,000.00",
+     "smoke test the basics");
+}
+
+{
+  my $cfg = BSE::Cfg->new_from_text(text => <<CFG);
+[number emptycomma]
+comma=""
+CFG
+  is(BSE::Util::Format::bse_number("emptycomma", 10000000, $cfg), "10000000",
+     "check empty comma doesn't infinite loop");
+}
+
+done_testing();