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) { |