Skip to content

Build error (Lua 5.3, 5.4, OpenSSL 3.5) #220

@scossu

Description

@scossu

Installing luaossl via luarocks, on Arch Linux, Lua 5.4, openssl 3.5.0:

 $ luarocks install --local luaossl
Installing https://luarocks.org/luaossl-20220711-0.src.rock

luaossl 20220711-0 depends on lua (5.4-1 provided by VM: success)
Applying patch config.h.diff...
Hunk 1 found at offset 2...
gcc -O2 -fPIC -I/usr/include -c src/openssl.c -o src/openssl.o -D_REENTRANT -D_THREAD_SAFE -DCOMPAT53_PREFIX=luaossl -D_GNU_SOURCE -I/usr/include -I/usr/include
src/openssl.c: In function ‘auxL_testoption’:
src/openssl.c:1176:27: error: initialization of ‘int (*)(void)’ from incompatible pointer type ‘int (*)(const char *, const char *)’ [-Wincompatible-pointer-types]
 1176 |         int (*optcmp)() = (nocase)?
      |                           ^
src/openssl.c:1186:26: error: too many arguments to function ‘optcmp’; expected 0, have 2
 1186 |                 if (0 == optcmp(optlist[i], optname))
      |                          ^~~~~~ ~~~~~~~~~~
src/openssl.c: At top level:
src/openssl.c:2835:70: error: initialization of ‘void * (*)(void)’ from incompatible pointer type ‘void * (*)(const SSL_CTX *, int)’ {aka ‘void * (*)(const struct ssl_ctx_st *, int)’} [-Wincompatible-pointer-types]
 2835 |         [EX_SSL_CTX_ALPN_SELECT_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                      ^
src/openssl.c:2835:70: note: (near initialization for ‘ex_type[0].get_ex_data’)
In file included from src/openssl.c:77:
/usr/include/openssl/ssl.h:2221:7: note: ‘SSL_CTX_get_ex_data’ declared here
 2221 | void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);
      |       ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2835:92: error: initialization of ‘int (*)(void)’ from incompatible pointer type ‘int (*)(SSL_CTX *, int,  void *)’ {aka ‘int (*)(struct ssl_ctx_st *, int,  void *)’} [-Wincompatible-pointer-types]
 2835 |         [EX_SSL_CTX_ALPN_SELECT_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                                            ^
src/openssl.c:2835:92: note: (near initialization for ‘ex_type[0].set_ex_data’)
/usr/include/openssl/ssl.h:2220:12: note: ‘SSL_CTX_set_ex_data’ declared here
 2220 | __owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
      |            ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2836:76: error: initialization of ‘void * (*)(void)’ from incompatible pointer type ‘void * (*)(const SSL_CTX *, int)’ {aka ‘void * (*)(const struct ssl_ctx_st *, int)’} [-Wincompatible-pointer-types]
 2836 |         [EX_SSL_CTX_TLSEXT_SERVERNAME_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                            ^
src/openssl.c:2836:76: note: (near initialization for ‘ex_type[1].get_ex_data’)
/usr/include/openssl/ssl.h:2221:7: note: ‘SSL_CTX_get_ex_data’ declared here
 2221 | void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);
      |       ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2836:98: error: initialization of ‘int (*)(void)’ from incompatible pointer type ‘int (*)(SSL_CTX *, int,  void *)’ {aka ‘int (*)(struct ssl_ctx_st *, int,  void *)’} [-Wincompatible-pointer-types]
 2836 |         [EX_SSL_CTX_TLSEXT_SERVERNAME_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                                                  ^
src/openssl.c:2836:98: note: (near initialization for ‘ex_type[1].set_ex_data’)
/usr/include/openssl/ssl.h:2220:12: note: ‘SSL_CTX_set_ex_data’ declared here
 2220 | __owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
      |            ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2837:79: error: initialization of ‘void * (*)(void)’ from incompatible pointer type ‘void * (*)(const SSL_CTX *, int)’ {aka ‘void * (*)(const struct ssl_ctx_st *, int)’} [-Wincompatible-pointer-types]
 2837 |         [EX_SSL_CTX_CUSTOM_EXTENSION_ADD_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                               ^
src/openssl.c:2837:79: note: (near initialization for ‘ex_type[2].get_ex_data’)
/usr/include/openssl/ssl.h:2221:7: note: ‘SSL_CTX_get_ex_data’ declared here
 2221 | void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);
      |       ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2837:101: error: initialization of ‘int (*)(void)’ from incompatible pointer type ‘int (*)(SSL_CTX *, int,  void *)’ {aka ‘int (*)(struct ssl_ctx_st *, int,  void *)’} [-Wincompatible-pointer-types]
 2837 |         [EX_SSL_CTX_CUSTOM_EXTENSION_ADD_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                                                     ^
src/openssl.c:2837:101: note: (near initialization for ‘ex_type[2].set_ex_data’)
/usr/include/openssl/ssl.h:2220:12: note: ‘SSL_CTX_set_ex_data’ declared here
 2220 | __owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
      |            ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2838:81: error: initialization of ‘void * (*)(void)’ from incompatible pointer type ‘void * (*)(const SSL_CTX *, int)’ {aka ‘void * (*)(const struct ssl_ctx_st *, int)’} [-Wincompatible-pointer-types]
 2838 |         [EX_SSL_CTX_CUSTOM_EXTENSION_PARSE_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                                 ^
src/openssl.c:2838:81: note: (near initialization for ‘ex_type[3].get_ex_data’)
/usr/include/openssl/ssl.h:2221:7: note: ‘SSL_CTX_get_ex_data’ declared here
 2221 | void *SSL_CTX_get_ex_data(const SSL_CTX *ssl, int idx);
      |       ^~~~~~~~~~~~~~~~~~~
src/openssl.c:2838:103: error: initialization of ‘int (*)(void)’ from incompatible pointer type ‘int (*)(SSL_CTX *, int,  void *)’ {aka ‘int (*)(struct ssl_ctx_st *, int,  void *)’} [-Wincompatible-pointer-types]
 2838 |         [EX_SSL_CTX_CUSTOM_EXTENSION_PARSE_CB] = { CRYPTO_EX_INDEX_SSL_CTX, -1, &SSL_CTX_get_ex_data, &SSL_CTX_set_ex_data },
      |                                                                                                       ^
src/openssl.c:2838:103: note: (near initialization for ‘ex_type[3].set_ex_data’)
/usr/include/openssl/ssl.h:2220:12: note: ‘SSL_CTX_set_ex_data’ declared here
 2220 | __owur int SSL_CTX_set_ex_data(SSL_CTX *ssl, int idx, void *data);
      |            ^~~~~~~~~~~~~~~~~~~
src/openssl.c: In function ‘ex_getdata’:
src/openssl.c:2991:22: error: too many arguments to function ‘type->get_ex_data’; expected 0, have 2
 2991 |         if (!(data = type->get_ex_data(obj, type->index)))
      |                      ^~~~              ~~~
src/openssl.c:2832:17: note: declared here
 2832 |         void *(*get_ex_data)();
      |                 ^~~~~~~~~~~
src/openssl.c: In function ‘ex_setdata’:
src/openssl.c:3019:21: error: too many arguments to function ‘type->get_ex_data’; expected 0, have 2
 3019 |         if ((data = type->get_ex_data(obj, type->index)) && data->state) {
      |                     ^~~~              ~~~
src/openssl.c:2832:17: note: declared here
 2832 |         void *(*get_ex_data)();
      |                 ^~~~~~~~~~~
src/openssl.c:3029:22: error: too many arguments to function ‘type->set_ex_data’; expected 0, have 3
 3029 |                 if (!type->set_ex_data(obj, type->index, data))
      |                      ^~~~              ~~~

[...]

/usr/include/openssl/pem.h:395:37: note: expected ‘int (*)(const void *, unsigned char **)’ but argument is of type ‘int (*)(void)’
  395 | int PEM_ASN1_write_bio(i2d_of_void *i2d, const char *name, BIO *bp,
      |                        ~~~~~~~~~~~~~^~~
src/openssl.c: In function ‘de5_string_to_key’:
src/openssl.c:12977:9: warning: ‘DES_string_to_key’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
12977 |         DES_string_to_key(luaL_checkstring(L, 1), &key);
      |         ^~~~~~~~~~~~~~~~~
In file included from src/openssl.c:80:
/usr/include/openssl/des.h:193:28: note: declared here
  193 | OSSL_DEPRECATEDIN_3_0 void DES_string_to_key(const char *str, DES_cblock *key);
      |                            ^~~~~~~~~~~~~~~~~
src/openssl.c: In function ‘de5_set_odd_parity’:
src/openssl.c:12992:9: warning: ‘DES_set_odd_parity’ is deprecated: Since OpenSSL 3.0 [-Wdeprecated-declarations]
12992 |         DES_set_odd_parity(&key);
      |         ^~~~~~~~~~~~~~~~~~
/usr/include/openssl/des.h:176:28: note: declared here
  176 | OSSL_DEPRECATEDIN_3_0 void DES_set_odd_parity(DES_cblock *key);
      |                            ^~~~~~~~~~~~~~~~~~

Error: Build error: Failed compiling object src/openssl.o

Also tried with Lua 5.3 + luarocks 2.3.0.

Is this an upstream OpenSSL library incompatibility?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions