ESP32 - LVGL - comportamento strano con style

Mi pare strano. Su Avr non mi da problemi un semplice

double d = 123.123;
char buf[10];
void setup() { Serial.begin(9600); }
void loop() {
  dtostrf(d, 5, 2, buf);
  Serial.println(buf);
}

visto che poi usa println che cerca il terminatore.
Il codice del core x Esp32 è ampiamente testato.
Questo il codice che risulta sul mio pc:

char *dtostrf(double number, signed int width, unsigned int prec, char *s) {
  bool negative = false;
  if (isnan(number)) {
    strcpy(s, "nan");
    return s;
  }
  if (isinf(number)) {
    strcpy(s, "inf");
    return s;
  }
  char *out = s;
  int fillme = width;  // how many cells to fill for the integer part
  if (prec > 0) {
    fillme -= (prec + 1);
  }
  // Handle negative numbers
  if (number < 0.0) {
    negative = true;
    fillme--;
    number = -number;
  }
  // Round correctly so that print(1.999, 2) prints as "2.00"
  // I optimized out most of the divisions
  double rounding = 2.0;
  for (unsigned int i = 0; i < prec; ++i) {
    rounding *= 10.0;
  }
  rounding = 1.0 / rounding;
  number += rounding;
  // Figure out how big our number really is
  double tenpow = 1.0;
  unsigned int digitcount = 1;
  while (number >= 10.0 * tenpow) {
    tenpow *= 10.0;
    digitcount++;
  }
  number /= tenpow;
  fillme -= digitcount;
  // Pad unused cells with spaces
  while (fillme-- > 0) {
    *out++ = ' ';
  }
  // Handle negative sign
  if (negative)  *out++ = '-';
  // Print the digits, and if necessary, the decimal point
  digitcount += prec;
  int8_t digit = 0;
  while (digitcount-- > 0) {
    digit = (int8_t)number;
    if (digit > 9) {
      digit = 9;  // insurance
    }
    *out++ = (char)('0' | digit);
    if ((digitcount == prec) && (prec > 0)) {
      *out++ = '.';
    }
    number -= digit;
    number *= 10.0;
  }
  // make sure the string is terminated
  *out = 0;
  return s;
}

ed al fondo scrive lo 0 (// make sure the string is terminated)

Su esp32 dovrebbe funzionare snprintf() con i double (non funziona su avr per la grande occupazione di memoria codice la gestione dei double nella printf, perciò han creato la dtostrf)
snprintf(buf, sizeof(buf), "%5.2f", d); //max 10 con terminatore