You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@doris.apache.org by GitBox <gi...@apache.org> on 2019/04/24 11:12:47 UTC

[GitHub] [incubator-doris] morningman opened a new issue #1018: FloatToBuffer may core in some case

morningman opened a new issue #1018: FloatToBuffer may core in some case
URL: https://github.com/apache/incubator-doris/issues/1018
 
 
   **Describe the bug**
   in `src/gutil/strings/numbers.cc`
   
   ```
   1310 int FloatToBuffer(float value, int width, char *buffer) {
   1311   // FLT_DIG is 6 for IEEE-754 floats, which are used on almost all
   1312   // platforms these days.  Just in case some system exists where FLT_DIG
   1313   // is significantly larger -- and risks overflowing our buffer -- we have
   1314   // this assert.
   1315   COMPILE_ASSERT(FLT_DIG < 10, FLT_DIG_is_too_big);
   1316
   1317   int snprintf_result =
   1318     snprintf(buffer, width, "%.*g", FLT_DIG, value);
   1319
   1320   // The snprintf should never overflow because the buffer is significantly
   1321   // larger than the precision we asked for.
   1322   DCHECK(snprintf_result > 0 && snprintf_result < width);
   1323
   1324   float parsed_value;
   1325   if (!safe_strtof(buffer, &parsed_value) || parsed_value != value) {
   1326     snprintf_result =
   1327       snprintf(buffer, width, "%.*g", FLT_DIG+2, value);
   1328
   1329     // Should never overflow; see above.
   1330     DCHECK(snprintf_result > 0 && snprintf_result < width);
   1331   }
   1332
   1333   return snprintf_result;
   1334 }
   ```
   
   line 1325: `parsed_value != value` may return true even if 2 values are some(because they are float)
   
   after line 1327, the snprintf_result = 14, which equal to width, such causing DCHECK failed.
   
   In gutils, the width here is 24, far larger than 14. So we just increase the width value to avoid this problem
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@doris.apache.org
For additional commands, e-mail: dev-help@doris.apache.org