Может ли расширение узла-гипа вызывать расширение связанного OpenSSL вместо узла OpenSSL? - PullRequest
0 голосов
/ 23 мая 2018

Работает на linux-wmxt 4.16.8-1-default (Tumbleweed).

У меня есть библиотека, которая вызывает API openssl 1.0.Я могу либо динамически связывать, либо статически связывать.Любой из них приводит к тому же результату.

Если я запускаю его из тестового жгута C, он работает нормально.

Те же самые вызовы с использованием узла через расширение node-gyp приводят к сбоям памяти, которые, я считаю,из-за того, что вызовы перенаправляются на версию узла API-вызовов, которые, я полагаю, используют openssl 1.1 (не совместимый с ABI с 1.0).

:
#17 0x12838e1 in ASN1_item_d2i_bio (/home/me/.nvm/versions/node/v10.1.0/bin/node+0x12838e1)
#18 0x7f808108687e in _extractp7certs /home/me/Projects/git/test.sdk.c/c/test/src/testcrypto.c:678
:
SUMMARY: AddressSanitizer: heap-buffer-overflow

Точно такая же кодовая база (статически связанная) в MacOSHigh Sierra отлично работает с узлом 9.9.

Прежде чем углубляться в это, простой вопрос.Есть ли способ сделать так, чтобы node-gyp гарантировал, что мой код вызывает мою версию OpenSSL, а не Nodes?Или мне придется обновить мой код до openssl 1.1?

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Я пробовал различные изменения в binding.gyp, такие как

{
  "targets": [
    {
      "target_name": "myid",
      "include_dirs": [ "../dep/include" ],
      "sources": [ "./src/myid.c" ],
      "libraries": [
            "/home/me/local/lib64/libcrypto.so",
            "/home/me/local/lib64/libssl.so",
            "/home/me/local/lib64/libcurl.so",
            "/home/me/local/lib64/libxmlsec1.so",
            "../dep/slib/libmylib.so"
        ]
    }
    ]
}

Эти библиотеки 1.0 были собраны с:

openssl: ./config --prefix = $HOME / local --openssldir = $ HOME / local / openssl

libcurl: ./configure --prefix = $ HOME / local --with-ssl = $ HOME / local --disable-ldap

libxmlsec1: ./configure --prefix = $ HOME / local --without-libxslt --with-openssl = $ HOME / local

Тот же результат.Поэтому я укусил пулю и обновил свой код до совместимости с OpenSSL 1.1 +.

Теперь привязка узла работает.

0 голосов
/ 23 мая 2018

Вы можете изменить binding.gyp и сделать так, чтобы он включал библиотеки lib и включаемые файлы из вашей версии openssl (путем указания пути) в аддон вашего узла.

...