diff options
author | daurnimator <quae@daurnimator.com> | 2018-04-20 22:04:26 +1000 |
---|---|---|
committer | daurnimator <quae@daurnimator.com> | 2018-04-20 22:04:26 +1000 |
commit | 6934a870564f8fd2d5cd7df3446e293d070c9a9e (patch) | |
tree | 52e3faf0dfa3cd67af52bf6268721f5e9b93e0c4 /src | |
parent | a260f381d30e036b39078fee0295e539067c10a3 (diff) | |
download | fengari-6934a870564f8fd2d5cd7df3446e293d070c9a9e.tar.gz fengari-6934a870564f8fd2d5cd7df3446e293d070c9a9e.tar.bz2 fengari-6934a870564f8fd2d5cd7df3446e293d070c9a9e.zip |
src/loslib.js: Fix os.time() with out-of-range values
Fixes #126
Diffstat (limited to 'src')
-rw-r--r-- | src/loslib.js | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/loslib.js b/src/loslib.js index 6c6b2f4..814d1b2 100644 --- a/src/loslib.js +++ b/src/loslib.js @@ -169,16 +169,20 @@ const os_date = function(L) { }; const os_time = function(L) { - let t = new Date(); - if (!lua_isnoneornil(L, 1)) /* called with arg */{ - luaL_checktype(L, 1, LUA_TTABLE); /* make sure table is at the top */ - lua_settop(L, 1); - t.setSeconds(getfield(L, "sec", 0, 0)); - t.setMinutes(getfield(L, "min", 0, 0)); - t.setHours(getfield(L, "hour", 12, 0)); - t.setDate(getfield(L, "day", -1, 0)); - t.setMonth(getfield(L, "month", -1, 1)); - t.setFullYear(getfield(L, "year", -1, 0)); + let t; + if (lua_isnoneornil(L, 1)) /* called without args? */ + t = new Date(); /* get current time */ + else { + luaL_checktype(L, 1, LUA_TTABLE); + lua_settop(L, 1); /* make sure table is at the top */ + t = new Date( + getfield(L, "year", -1, 0), + getfield(L, "month", -1, 1), + getfield(L, "day", -1, 0), + getfield(L, "hour", 12, 0), + getfield(L, "min", 0, 0), + getfield(L, "sec", 0, 0) + ) setallfields(L, t); } |