diff --git a/libs/libc/time/lib_asctimer.c b/libs/libc/time/lib_asctimer.c index 3f32301ef95..14ccf2b206c 100644 --- a/libs/libc/time/lib_asctimer.c +++ b/libs/libc/time/lib_asctimer.c @@ -28,6 +28,14 @@ #include +/**************************************************************************** + * Pre-processor definitions + ****************************************************************************/ + +#ifndef ARRAY_SIZE +# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#endif + /**************************************************************************** * Private Data ****************************************************************************/ @@ -73,6 +81,13 @@ FAR char *asctime_r(FAR const struct tm *tp, FAR char *buf) { char tmp[128]; + if (tp == NULL || + tp->tm_wday >= ARRAY_SIZE(g_wday_name) || + tp->tm_mon >= ARRAY_SIZE(g_mon_name)) + { + return NULL; + } + snprintf(tmp, sizeof(tmp), "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n", g_wday_name[tp->tm_wday], g_mon_name[tp->tm_mon], tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec,