From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id F2DB76F152; Tue, 30 Jun 2026 17:18:07 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org F2DB76F152 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1782829088; bh=yYztC7avkMM6gBJgr5b90cQVR2Rd/ABvoI1oD3ncwOQ=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=g97O7YmcC9SyZbxUorGIl93t4SjhIsrGVdI73DmY0V/piXsrzLHzZSxwMpCJfsDGo LZ6auYdXOjggsLOOVrWPapG5/yM8QXdJy9fnOP9zhUAVRrM6iwoND/pHPuhCfn1cs9 2f8GUnTL6WgrveLcvqbYYHLnBHPZPXv89+ETDARU= Received: from send34.i.mail.ru (send34.i.mail.ru [89.221.237.129]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 596776F152 for ; Tue, 30 Jun 2026 17:18:06 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 596776F152 Received: by exim-smtp-78b8b8c574-7hgvm with esmtpa (envelope-from ) id 1weZHp-00000000Cy4-0uUL; Tue, 30 Jun 2026 17:18:05 +0300 Content-Type: multipart/alternative; boundary="------------2gypH9V0u6avpUE2XvsYLUSR" Message-ID: <72333bfb-e3b7-4696-823d-715f526aa988@tarantool.org> Date: Tue, 30 Jun 2026 17:18:04 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Evgeniy Temirgaleev , Sergey Kaplun Cc: tarantool-patches@dev.tarantool.org References: In-Reply-To: X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9F802F6E87846D5F6B999C0DBC991128C7D92C87C94ABD4C100894C459B0CD1B9E9610591E269121B0578E6996F383413890F76BB648A0209FF0DB82F6E14510AE8A5C135F8BDED31 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7A3DED2DACB82E709C2099A533E45F2D0395957E7521B51C2CFCAF695D4D8E9FCEA1F7E6F0F101C6759CC434672EE6371C2A783ECEC0211ADC4224003CC836476D5A39DEEDB180909611E41BBFE2FEB2BFF45CF055610950ED0225612930D46BC73CD7AF8875A69996E21DC3465C5C6C29FA2833FD35BB23D9E625A9149C048EE33AC447995A7AD1828451B159A507268D2E47CDBA5A96583BD4B6F7A4D31EC0BC014FD901B82EE079FA2833FD35BB23D27C277FBC8AE2E8B3733B5EC72352B9FA471835C12D1D977C4224003CC836476EB9C4185024447017B076A6E789B0E975F5C1EE8F4F765FCEE6861575290A7923AA81AA40904B5D9CF19DD082D7633A0C84D3B47A649675F3AA81AA40904B5D98AA50765F7900637386718F997DF22F4D81D268191BDAD3D3666184CF4C3C14F3FC91FA280E0CE3D1A620F70A64A45A98AA50765F79006372E808ACE2090B5E1725E5C173C3A84C3C5EA940A35A165FF2DBA43225CD8A89F616AD31D0D18CD5C42539A7722CA490CB5C8C57E37DE458BEDA766A37F9254B7 X-C1DE0DAB: 0D63561A33F958A563B110234B0BC5395002B1117B3ED6967FCF6B331A40C4EFA9DAB4B68AE4D22F823CB91A9FED034534781492E4B8EEAD37F46C620FF2CAEEBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0AD73CAD6646DEDE191716CD42B3DD1D34CAB70F9BE574AE9C625B6776AC983F447FC0B9F89525902EE6F57B2FD27647F25E66C117BDB76D6590545725374AD0A2D49B52FCD0FCEE92D02ABF3C2EB94B816C5CB6CDEEE840C11F27CF3FF819434C2B8341EE9D5BE9A0AB5921A63E502844DFE5C9E378AFE22FF140EF60CC94777846536EB022892E5344C41F94D744909CE2512F26BEC029E55448553D2254B8D95CD72808BE417F3B9E0E7457915DAA85F X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVRSZSJkMhZtMWEe7RVjBQXE= X-Mailru-Sender: C4F68CFF4024C8867DFDF7C7F25884588962657CCEF63375D4570605F44DF537AB7554A74E8789DA911995875D758F1D645D15D82EE4B272BD6E4642A116CA93524AA66B5ACBE6721EF430B9A63E2A504198E0F3ECE9B5443453F38A29522196 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit 1/2] Fix corner case of os.time(). X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Bronnikov via Tarantool-patches Reply-To: Sergey Bronnikov Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" This is a multi-part message in MIME format. --------------2gypH9V0u6avpUE2XvsYLUSR Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, Evgeniy! Thanks for the patch! LGTM Sergey On 6/29/26 20:21, Evgeniy Temirgaleev wrote: > From: Mike Pall > > Thanks to Temir Galeev. #1470 > > (cherry picked from commit 72d2061ae2fa9a5fd45237943f9982baf59435ec) > > This patch fixes invalid os.time(t) behavior, when it handles -1 time value > as a fail of the libc mktime() regardless of the errno value. > > Temir Galeev: > * added the description and the test for the patch > > Part of tarantool/tarantool#12480 > --- > src/lib_os.c | 3 ++- > .../lj-1470-os-time-epoch-minus-1s.test.lua | 12 ++++++++++++ > 2 files changed, 14 insertions(+), 1 deletion(-) > create mode 100644 test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua > > diff --git a/src/lib_os.c b/src/lib_os.c > index ffbc3fdc..f6841357 100644 > --- a/src/lib_os.c > +++ b/src/lib_os.c > @@ -242,9 +242,10 @@ LJLIB_CF(os_time) > ts.tm_mon = getfield(L, "month", -1) - 1; > ts.tm_year = getfield(L, "year", -1) - 1900; > ts.tm_isdst = getboolfield(L, "isdst"); > + errno = 0; > t = mktime(&ts); > } > - if (t == (time_t)(-1)) > + if (t == (time_t)(-1) && errno != 0) > lua_pushnil(L); > else > lua_pushnumber(L, (lua_Number)t); > diff --git a/test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua b/test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua > new file mode 100644 > index 00000000..6b5703e4 > --- /dev/null > +++ b/test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua > @@ -0,0 +1,12 @@ > +local tap = require('tap') > + > +-- The test file demonstrates os.time() fail to return -1 time value. > +-- See also:https://github.com/LuaJIT/LuaJIT/issues/1470. > +local test = tap.test('lj-1470-os-time-epoch-minus-1s') > + > +test:plan(1) > + > +local minus_1s_time = os.date("*t", -1) > +test:is(os.time(minus_1s_time), -1, 'correct os.time()') > + > +test:done(true) --------------2gypH9V0u6avpUE2XvsYLUSR Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit

Hi, Evgeniy!

Thanks for the patch! LGTM

Sergey

On 6/29/26 20:21, Evgeniy Temirgaleev wrote:
From: Mike Pall <mike>

Thanks to Temir Galeev. #1470

(cherry picked from commit 72d2061ae2fa9a5fd45237943f9982baf59435ec)

This patch fixes invalid os.time(t) behavior, when it handles -1 time value
as a fail of the libc mktime() regardless of the errno value.

Temir Galeev:
* added the description and the test for the patch

Part of tarantool/tarantool#12480
---
 src/lib_os.c                                         |  3 ++-
 .../lj-1470-os-time-epoch-minus-1s.test.lua          | 12 ++++++++++++
 2 files changed, 14 insertions(+), 1 deletion(-)
 create mode 100644 test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua

diff --git a/src/lib_os.c b/src/lib_os.c
index ffbc3fdc..f6841357 100644
--- a/src/lib_os.c
+++ b/src/lib_os.c
@@ -242,9 +242,10 @@ LJLIB_CF(os_time)
     ts.tm_mon = getfield(L, "month", -1) - 1;
     ts.tm_year = getfield(L, "year", -1) - 1900;
     ts.tm_isdst = getboolfield(L, "isdst");
+    errno = 0;
     t = mktime(&ts);
   }
-  if (t == (time_t)(-1))
+  if (t == (time_t)(-1) && errno != 0)
     lua_pushnil(L);
   else
     lua_pushnumber(L, (lua_Number)t);
diff --git a/test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua b/test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua
new file mode 100644
index 00000000..6b5703e4
--- /dev/null
+++ b/test/tarantool-tests/lj-1470-os-time-epoch-minus-1s.test.lua
@@ -0,0 +1,12 @@
+local tap = require('tap')
+
+-- The test file demonstrates os.time() fail to return -1 time value.
+-- See also: https://github.com/LuaJIT/LuaJIT/issues/1470.
+local test = tap.test('lj-1470-os-time-epoch-minus-1s')
+
+test:plan(1)
+
+local minus_1s_time = os.date("*t", -1)
+test:is(os.time(minus_1s_time), -1, 'correct os.time()')
+
+test:done(true)
--------------2gypH9V0u6avpUE2XvsYLUSR--