Skip to content

Commit 6f0419a

Browse files
LeszekSwirskiV8 LUCI CQ
authored andcommitted
[numbers] Be robust against flushed denormals in double-to-string
Bug: 382005099 Change-Id: I07f38f4d77087070a4e3ca7199cdc3cc9022793d Fixes: 394644268 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/6236978 Auto-Submit: Leszek Swirski <[email protected]> Commit-Queue: Leszek Swirski <[email protected]> Commit-Queue: Jakob Kummerow <[email protected]> Reviewed-by: Jakob Kummerow <[email protected]> Cr-Commit-Position: refs/heads/main@{#98535}
1 parent 60c4ef9 commit 6f0419a

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/numbers/conversions.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <cmath>
1111
#include <optional>
1212

13+
#include "src/base/fpu.h"
1314
#include "src/base/numbers/dtoa.h"
1415
#include "src/base/numbers/strtod.h"
1516
#include "src/base/small-vector.h"
@@ -1251,8 +1252,10 @@ std::string_view DoubleToRadixStringView(double value, int radix,
12511252
// We only compute fractional digits up to the input double's precision.
12521253
double delta = 0.5 * (base::Double(value).NextDouble() - value);
12531254
delta = std::max(base::Double(0.0).NextDouble(), delta);
1254-
DCHECK_GT(delta, 0.0);
1255-
if (fraction >= delta) {
1255+
// Delta should always be greater than zero, so long as we're not flushing
1256+
// denormals to zero.
1257+
DCHECK_IMPLIES(!(delta > 0.0), base::FPU::GetFlushDenormals());
1258+
if (delta > 0.0 && fraction >= delta) {
12561259
// Insert decimal point.
12571260
buffer[fraction_cursor++] = '.';
12581261
do {

0 commit comments

Comments
 (0)