]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Fix os.date() for wider libc strftime() compatibility.
authorMike Pall <mike>
Thu, 10 Jan 2019 11:47:28 +0000 (12:47 +0100)
committerMike Pall <mike>
Thu, 10 Jan 2019 11:47:28 +0000 (12:47 +0100)
Thanks to Jesper Lundgren.

src/lib_os.c

index 9e78d49ac3c68612927f735fd016c263b127fd07..ffbc3fdc7aad19d1a1f48aa312f83f4872d694af 100644 (file)
@@ -205,12 +205,12 @@ LJLIB_CF(os_date)
     setboolfield(L, "isdst", stm->tm_isdst);
   } else if (*s) {
     SBuf *sb = &G(L)->tmpbuf;
-    MSize sz = 0;
+    MSize sz = 0, retry = 4;
     const char *q;
     for (q = s; *q; q++)
       sz += (*q == '%') ? 30 : 1;  /* Overflow doesn't matter. */
     setsbufL(sb, L);
-    for (;;) {
+    while (retry--) {  /* Limit growth for invalid format or empty result. */
       char *buf = lj_buf_need(sb, sz);
       size_t len = strftime(buf, sbufsz(sb), s, stm);
       if (len) {