* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
@ 2020-05-28 21:59 Peter Seiderer
2020-05-29 6:09 ` Thomas Petazzoni
2020-08-13 21:36 ` Thomas Petazzoni
0 siblings, 2 replies; 7+ messages in thread
From: Peter Seiderer @ 2020-05-28 21:59 UTC (permalink / raw)
To: buildroot
Use ac_cv_func_working_mktime=yes to force the use of a provided
mktime implementation instead of compiling the failing own one.
Fixes:
http://autobuild.buildroot.net/results/5bcd8f4235002da682cc900f866116d2fe87f1c8
mktime.c: In function 'ydhms_diff':
mktime.c:106:52: error: size of array 'a' is negative
#define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
^
mktime.c:170:3: note: in expansion of macro 'verify'
verify (long_int_year_and_yday_are_wide_enough,
^~~~~~
with the failure/assert comming from the lines:
verify (long_int_year_and_yday_are_wide_enough,
INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
which fails since the y2038 time_t conversion from 32bit to 64bit
(musl libc).
Signed-off-by: Peter Seiderer <ps.report@gmx.net>
---
Changes v1 -> v2:
- enhance commit log (as suggested by Thomas Petazzoni)
---
package/cvs/cvs.mk | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/package/cvs/cvs.mk b/package/cvs/cvs.mk
index 563802cc9d..6f83ca6408 100644
--- a/package/cvs/cvs.mk
+++ b/package/cvs/cvs.mk
@@ -12,7 +12,9 @@ CVS_LICENSE = GPL-1.0+, LGPL-2.0+, LGPL-2.1+ (glob)
CVS_LICENSE_FILES = COPYING COPYING.LIB lib/glob-libc.h
CVS_DEPENDENCIES = ncurses
-CVS_CONF_ENV = cvs_cv_func_printf_ptr=yes
+CVS_CONF_ENV = \
+ ac_cv_func_working_mktime=yes \
+ cvs_cv_func_printf_ptr=yes
CVS_CONFIGURE_ARGS = --disable-old-info-format-support
ifeq ($(BR2_PACKAGE_CVS_SERVER),y)
--
2.26.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
2020-05-28 21:59 [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure Peter Seiderer
@ 2020-05-29 6:09 ` Thomas Petazzoni
2020-05-29 18:43 ` Peter Seiderer
2020-08-13 21:36 ` Thomas Petazzoni
1 sibling, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2020-05-29 6:09 UTC (permalink / raw)
To: buildroot
On Thu, 28 May 2020 23:59:12 +0200
Peter Seiderer <ps.report@gmx.net> wrote:
> Use ac_cv_func_working_mktime=yes to force the use of a provided
> mktime implementation instead of compiling the failing own one.
>
> Fixes:
>
> http://autobuild.buildroot.net/results/5bcd8f4235002da682cc900f866116d2fe87f1c8
>
> mktime.c: In function 'ydhms_diff':
> mktime.c:106:52: error: size of array 'a' is negative
> #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
> ^
> mktime.c:170:3: note: in expansion of macro 'verify'
> verify (long_int_year_and_yday_are_wide_enough,
> ^~~~~~
>
> with the failure/assert comming from the lines:
>
> verify (long_int_year_and_yday_are_wide_enough,
> INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
Wait wait, this is verifying that TIME_T_MAX is lower than UINT_MAX, so
I guess the rest of the code assumes that the size of time_t is less or
equal than the size of an unsigned int.
With the time_t conversion to 64bit, time_t *is* larger than an
unsigned int.
So aren't you papering over the problem, and in fact potentially
causing some issues in CVS, which seems to assume the time_t fits in
32-bit ?
Or maybe I'm wrong here, because I see AlpineLinux simply updates the
mktime configure test to fix this issue:
https://git.alpinelinux.org/aports/tree/main/cvs/mktime-configure.patch
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 7+ messages in thread* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
2020-05-29 6:09 ` Thomas Petazzoni
@ 2020-05-29 18:43 ` Peter Seiderer
2020-05-29 19:07 ` Thomas Petazzoni
0 siblings, 1 reply; 7+ messages in thread
From: Peter Seiderer @ 2020-05-29 18:43 UTC (permalink / raw)
To: buildroot
Hello Thomas,
On Fri, 29 May 2020 08:09:48 +0200, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:
> On Thu, 28 May 2020 23:59:12 +0200
> Peter Seiderer <ps.report@gmx.net> wrote:
>
> > Use ac_cv_func_working_mktime=yes to force the use of a provided
> > mktime implementation instead of compiling the failing own one.
> >
> > Fixes:
> >
> > http://autobuild.buildroot.net/results/5bcd8f4235002da682cc900f866116d2fe87f1c8
> >
> > mktime.c: In function 'ydhms_diff':
> > mktime.c:106:52: error: size of array 'a' is negative
> > #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
> > ^
> > mktime.c:170:3: note: in expansion of macro 'verify'
> > verify (long_int_year_and_yday_are_wide_enough,
> > ^~~~~~
> >
> > with the failure/assert comming from the lines:
> >
> > verify (long_int_year_and_yday_are_wide_enough,
> > INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
>
> Wait wait, this is verifying that TIME_T_MAX is lower than UINT_MAX, so
> I guess the rest of the code assumes that the size of time_t is less or
> equal than the size of an unsigned int.
>
> With the time_t conversion to 64bit, time_t *is* larger than an
> unsigned int.
>
> So aren't you papering over the problem, and in fact potentially
> causing some issues in CVS, which seems to assume the time_t fits in
> 32-bit ?
....it is only the internal assumption of the local mktime implementation,
as far as I see all cvs callers of mktime use time_t to store the return
value....
Regards,
Peter
>
> Or maybe I'm wrong here, because I see AlpineLinux simply updates the
> mktime configure test to fix this issue:
>
> https://git.alpinelinux.org/aports/tree/main/cvs/mktime-configure.patch
>
> Thomas
^ permalink raw reply [flat|nested] 7+ messages in thread* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
2020-05-29 18:43 ` Peter Seiderer
@ 2020-05-29 19:07 ` Thomas Petazzoni
2020-05-29 22:21 ` Peter Seiderer
0 siblings, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2020-05-29 19:07 UTC (permalink / raw)
To: buildroot
On Fri, 29 May 2020 20:43:43 +0200
Peter Seiderer <ps.report@gmx.net> wrote:
> > With the time_t conversion to 64bit, time_t *is* larger than an
> > unsigned int.
> >
> > So aren't you papering over the problem, and in fact potentially
> > causing some issues in CVS, which seems to assume the time_t fits in
> > 32-bit ?
>
> ....it is only the internal assumption of the local mktime implementation,
> as far as I see all cvs callers of mktime use time_t to store the return
> value....
Hm, ok. But does it make sense to use the AlpineLinux patch instead ?
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
2020-05-29 19:07 ` Thomas Petazzoni
@ 2020-05-29 22:21 ` Peter Seiderer
0 siblings, 0 replies; 7+ messages in thread
From: Peter Seiderer @ 2020-05-29 22:21 UTC (permalink / raw)
To: buildroot
Hello Thomas,
On Fri, 29 May 2020 21:07:05 +0200, Thomas Petazzoni <thomas.petazzoni@bootlin.com> wrote:
> On Fri, 29 May 2020 20:43:43 +0200
> Peter Seiderer <ps.report@gmx.net> wrote:
>
> > > With the time_t conversion to 64bit, time_t *is* larger than an
> > > unsigned int.
> > >
> > > So aren't you papering over the problem, and in fact potentially
> > > causing some issues in CVS, which seems to assume the time_t fits in
> > > 32-bit ?
> >
> > ....it is only the internal assumption of the local mktime implementation,
> > as far as I see all cvs callers of mktime use time_t to store the return
> > value....
>
> Hm, ok. But does it make sense to use the AlpineLinux patch instead ?
Did a short test (as the alpine linux patch patches configure directly):
$ wget https://git.alpinelinux.org/aports/plain/main/cvs/mktime-configure.patch
$ make cvs-patch
$ cd build/cvs-1.12.13/
$ patch -p 1 < mktime-configure.patch
$ cd ../..
$ make cvs
...still fails (as expected as the mktime check is a runtime check (?) which
is unfixable for cross-compile)...
Regards,
Peter
>
> Thomas
^ permalink raw reply [flat|nested] 7+ messages in thread
* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
2020-05-28 21:59 [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure Peter Seiderer
2020-05-29 6:09 ` Thomas Petazzoni
@ 2020-08-13 21:36 ` Thomas Petazzoni
2020-08-28 16:31 ` Peter Korsgaard
1 sibling, 1 reply; 7+ messages in thread
From: Thomas Petazzoni @ 2020-08-13 21:36 UTC (permalink / raw)
To: buildroot
On Thu, 28 May 2020 23:59:12 +0200
Peter Seiderer <ps.report@gmx.net> wrote:
> Use ac_cv_func_working_mktime=yes to force the use of a provided
> mktime implementation instead of compiling the failing own one.
>
> Fixes:
>
> http://autobuild.buildroot.net/results/5bcd8f4235002da682cc900f866116d2fe87f1c8
>
> mktime.c: In function 'ydhms_diff':
> mktime.c:106:52: error: size of array 'a' is negative
> #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
> ^
> mktime.c:170:3: note: in expansion of macro 'verify'
> verify (long_int_year_and_yday_are_wide_enough,
> ^~~~~~
>
> with the failure/assert comming from the lines:
>
> verify (long_int_year_and_yday_are_wide_enough,
> INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
>
> which fails since the y2038 time_t conversion from 32bit to 64bit
> (musl libc).
>
> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
> ---
> Changes v1 -> v2:
> - enhance commit log (as suggested by Thomas Petazzoni)
> ---
> package/cvs/cvs.mk | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
Applied to master, thanks.
Thomas
--
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 7+ messages in thread* [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure
2020-08-13 21:36 ` Thomas Petazzoni
@ 2020-08-28 16:31 ` Peter Korsgaard
0 siblings, 0 replies; 7+ messages in thread
From: Peter Korsgaard @ 2020-08-28 16:31 UTC (permalink / raw)
To: buildroot
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@bootlin.com> writes:
> On Thu, 28 May 2020 23:59:12 +0200
> Peter Seiderer <ps.report@gmx.net> wrote:
>> Use ac_cv_func_working_mktime=yes to force the use of a provided
>> mktime implementation instead of compiling the failing own one.
>>
>> Fixes:
>>
>> http://autobuild.buildroot.net/results/5bcd8f4235002da682cc900f866116d2fe87f1c8
>>
>> mktime.c: In function 'ydhms_diff':
>> mktime.c:106:52: error: size of array 'a' is negative
>> #define verify(name, assertion) struct name { char a[(assertion) ? 1 : -1]; }
>> ^
>> mktime.c:170:3: note: in expansion of macro 'verify'
>> verify (long_int_year_and_yday_are_wide_enough,
>> ^~~~~~
>>
>> with the failure/assert comming from the lines:
>>
>> verify (long_int_year_and_yday_are_wide_enough,
>> INT_MAX <= LONG_MAX / 2 || TIME_T_MAX <= UINT_MAX);
>>
>> which fails since the y2038 time_t conversion from 32bit to 64bit
>> (musl libc).
>>
>> Signed-off-by: Peter Seiderer <ps.report@gmx.net>
>> ---
>> Changes v1 -> v2:
>> - enhance commit log (as suggested by Thomas Petazzoni)
>> ---
>> package/cvs/cvs.mk | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
Committed to 2020.02.x and 2020.05.x, thanks.
--
Bye, Peter Korsgaard
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-08-28 16:31 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-05-28 21:59 [Buildroot] [PATCH v2] package/cvs: fix mktime related compile failure Peter Seiderer
2020-05-29 6:09 ` Thomas Petazzoni
2020-05-29 18:43 ` Peter Seiderer
2020-05-29 19:07 ` Thomas Petazzoni
2020-05-29 22:21 ` Peter Seiderer
2020-08-13 21:36 ` Thomas Petazzoni
2020-08-28 16:31 ` Peter Korsgaard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox