diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib_os.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lib_os.c b/src/lib_os.c index 9e78d49a..ffbc3fdc 100644 --- a/src/lib_os.c +++ b/src/lib_os.c | |||
| @@ -205,12 +205,12 @@ LJLIB_CF(os_date) | |||
| 205 | setboolfield(L, "isdst", stm->tm_isdst); | 205 | setboolfield(L, "isdst", stm->tm_isdst); |
| 206 | } else if (*s) { | 206 | } else if (*s) { |
| 207 | SBuf *sb = &G(L)->tmpbuf; | 207 | SBuf *sb = &G(L)->tmpbuf; |
| 208 | MSize sz = 0; | 208 | MSize sz = 0, retry = 4; |
| 209 | const char *q; | 209 | const char *q; |
| 210 | for (q = s; *q; q++) | 210 | for (q = s; *q; q++) |
| 211 | sz += (*q == '%') ? 30 : 1; /* Overflow doesn't matter. */ | 211 | sz += (*q == '%') ? 30 : 1; /* Overflow doesn't matter. */ |
| 212 | setsbufL(sb, L); | 212 | setsbufL(sb, L); |
| 213 | for (;;) { | 213 | while (retry--) { /* Limit growth for invalid format or empty result. */ |
| 214 | char *buf = lj_buf_need(sb, sz); | 214 | char *buf = lj_buf_need(sb, sz); |
| 215 | size_t len = strftime(buf, sbufsz(sb), s, stm); | 215 | size_t len = strftime(buf, sbufsz(sb), s, stm); |
| 216 | if (len) { | 216 | if (len) { |
