Do tej pory we wszystkich moich projektach, zgodnie z zalecaną praktyką stosowałem funkcję snprintf() zamiast sprintf(), aby uniknąć możliwości przepełnienia bufora. Podobnie z innymi funkcjami z stdio.h i string.h, które posiadają taki odpowiednik.
Jednak z tego co widzę, to w przypadku SDK do ESP8266 nie jest to takie proste. Wśród bibliotek udostępnionych przez producenta znajdują się osobne funkcje do manipulowana łańcuchami tekstowymi, z prefiksem "os_". Zamiast sprintf() należy więc używać os_sprintf. Problem w tym, że w zestawie nie ma funkcji sprawdzających wielkość bufora.
Teoretycznie można w projekcie wykorzystać standardowe biblioteki "stdio.h" albo "string.h", jednak z tego co wyczytałem nie jest to zalecane i wynika to ze specyfiki sprzętu (coś z wyrównywaniem pamięci). Kod się skompiluje i może działać, ale wcale nie musi i nie ma gwarancji, że w pewnym momencie się z tego powodu nie wysypie.
Stąd mam kilka pytań do osób trochę lepiej obeznanych z tą platformą:
1) Czy Arduino Core dla ESP8266 też jest dotknięte tą przypadłością? Jest ono zaledwie nakładką na oficjalne SDK, czy też ktoś przeportował standardowe biblioteki uwzględniając tę kwestię i można bezpiecznie używać snprintf()? Niby nie przepadam szczególnie za Arduino, ale to byłoby jakimś argumentem... 2) Czy istnieje jakiś prosty sposób na uniknięcie tego problemu, przy jednoczesnym korzystaniu z os_sprintf()? Czy też jedynym wyjściem jest wcześniejsze sprawdzanie długości wszystkich elementów składowych, wpisywanych?