bug-wget
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 32 bit to 64 bit casting


From: KeithG
Subject: Re: 32 bit to 64 bit casting
Date: Thu, 30 Jun 2022 07:04:43 -0500

On Wed, Jun 22, 2022 at 12:16 PM Petr Pisar <petr.pisar@atlas.cz> wrote:
>
> Can you post here a complete certificate chain the server presents to wget?
> You can use "openssl s_client -connect THE_HOST:https -showcerts to obtain it.
> If it so, than the only fix is to recompile your system with "-D_TIME_BITS=64
> -D_FILE_OFFSET_BITS=64" CFLAGS. (Provided your platform supports it.)
>
> -- Petr

Petr,

I have done a bit more checking and it appears some configurational
issue with Arch on armv7 is the cause. I have not been able to pin it
down. I did verify that the binary is built with the 2 flags you
mention:
This is a snippet of the config.log for the binary that does not work:

| #define HAVE_FSEEKO 1
| #define _FILE_OFFSET_BITS 64
| #define _TIME_BITS 64
| #define _FILE_OFFSET_BITS 64
| /* end confdefs.h.  */
| #if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32)
|                    int ok;
|                   #else
|                    error fail
|                   #endif
|
configure:11550: result: yes
configure:11559: checking for ELF binary format
configure:11583: result: yes
configure:11635: checking for the common suffixes of directories in
the library search path
configure:11704: result: lib,lib,lib
configure:12229: checking for CFPreferencesCopyAppValue
configure:12248: gcc -o conftest -DNDEBUG -march=armv7-a
-mfloat-abi=hard -mfpu=vfpv3-d16 -O2 -pipe -fstack-protector-strong
-fno-plt -fexceptions         -Wp,-D_FORTIFY_SOURCE=2 -Wformat
-Werror=format-security         -fstack-clash-protection
-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now conftest.c
-Wl,-framework -Wl,CoreFoundation >&5
conftest.c:74:10: fatal error: CoreFoundation/CFPreferences.h: No such
file or directory
   74 | #include <CoreFoundation/CFPreferences.h>
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
distcc[3295] ERROR: compile conftest.c on localhost failed
configure:12248: $? = 1
configure: failed program was:
| /* confdefs.h */

I tried it on RpiOS using the same architecture (armv7) which builds a
binary that passes all the tests and works properly and this part of
the config.log is dramatically different:

| #define HAVE_FSEEKO 1
| #define _FILE_OFFSET_BITS 64
| /* end confdefs.h.  */
|
|   #include <time.h>
|   /* Check that time_t can represent 2**32 - 1 correctly.  */
|   #define LARGE_TIME_T \
|     ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
|   int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
|                            && LARGE_TIME_T % 65537 == 0)
|                           ? 1 : -1];
|
configure:9815: result: no
configure:9818: checking for 64-bit time_t with _TIME_BITS=64
configure:9838: gcc -c -DNDEBUG -g -O2  conftest.c >&5
conftest.c:78:43: warning: integer overflow in expression of type
'long int' results in '-1073741824' [-Woverflow]
   78 |     ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
      |                                           ^
conftest.c:79:28: note: in expansion of macro 'LARGE_TIME_T'
   79 |   int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
      |                            ^~~~~~~~~~~~
conftest.c:78:43: warning: integer overflow in expression of type
'long int' results in '-1073741824' [-Woverflow]
   78 |     ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30)))
      |                                           ^
conftest.c:80:31: note: in expansion of macro 'LARGE_TIME_T'
   80 |                            && LARGE_TIME_T % 65537 == 0)
      |                               ^~~~~~~~~~~~
conftest.c:79:7: error: variably modified 'verify_time_t_range' at file scope
   79 |   int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535
      |       ^~~~~~~~~~~~~~~~~~~
configure:9838: $? = 1
configure: failed program was:
| /* confdefs.h */

I am not that well versed in what I should do at this point, but it
appears that the tests for 64 bit time are different and I wonder why
they are and what should be fixed.

Both use the same configure directive:

./configure \
--prefix=/usr \
--sysconfdir=/etc \
--disable-rpath \
--enable-nls \
--with-ssl=gnutls


Keith



reply via email to

[Prev in Thread] Current Thread [Next in Thread]