]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-11297 fix thread safety if SvgFormatter class
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>
Wed, 10 Oct 2018 09:59:04 +0000 (11:59 +0200)
committerSonarTech <sonartech@sonarsource.com>
Thu, 11 Oct 2018 18:20:55 +0000 (20:20 +0200)
server/sonar-server/src/main/java/org/sonar/server/badge/ws/SvgFormatter.java

index dfad1ab0b4ee70c8d2c341c08b782d1d73dbf8b3..c84a7ec3816e8009f5904ad6aa9093043bce92e5 100644 (file)
@@ -31,12 +31,9 @@ class SvgFormatter {
 
   private static final String ZERO = "0";
 
-  private static final NumberFormat NUMERIC_FORMATTER = DecimalFormat.getInstance(Locale.ENGLISH);
   private static final String NUMERIC_SUFFIX_LIST = " kmbt";
   private static final String NUMERIC_REGEXP = "\\.[0-9]+";
 
-  private static final DecimalFormat PERCENT_FORMATTER = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
-
   private static final String DURATION_MINUTES_FORMAT = "%smin";
   private static final String DURATION_HOURS_FORMAT = "%sh";
   private static final String DURATION_DAYS_FORMAT = "%sd";
@@ -52,16 +49,18 @@ class SvgFormatter {
     if (value == 0) {
       return ZERO;
     }
-    NUMERIC_FORMATTER.setMaximumFractionDigits(1);
+    NumberFormat numericFormatter = DecimalFormat.getInstance(Locale.ENGLISH);
+    numericFormatter.setMaximumFractionDigits(1);
     int power = (int) StrictMath.log10(value);
     double valueToFormat = value / (Math.pow(10, Math.floorDiv(power, 3) * 3d));
-    String formattedNumber = NUMERIC_FORMATTER.format(valueToFormat);
+    String formattedNumber = numericFormatter.format(valueToFormat);
     formattedNumber = formattedNumber + NUMERIC_SUFFIX_LIST.charAt(power / 3);
     return formattedNumber.length() > 4 ? trim(formattedNumber.replaceAll(NUMERIC_REGEXP, "")) : trim(formattedNumber);
   }
 
   static String formatPercent(double value) {
-    return PERCENT_FORMATTER.format(value) + "%";
+    DecimalFormat percentFormatter = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance(Locale.ENGLISH));
+    return percentFormatter.format(value) + "%";
   }
 
   static String formatDuration(long durationInMinutes) {