On 8/11/19 6:48 PM, Peter Stuge wrote:
Hi Leo,

Leo wrote:
Now when I try to connect to SFTP site, the crash produces the following
output in Xcode debugger:

openssl.c > _libssh2_openssl_crypto_init()


#if OPENSSL_VERSION_NUMBER >= 0x10100000L && \
  ?????? !defined(LIBRESSL_VERSION_NUMBER)
  ?????? #ifndef OPENSSL_NO_ENGINE
  ?????????????? ENGINE_load_builtin_engines();?????????????????????????????????? 
<-- Thread 8:
EXC_BAD_ACCESS (code=1, address=0x116)
  ?????????????? ENGINE_register_all_complete();
  ?????? #endif

I guess that OpenSSL was somehow already initialized, and the crash
happens becuse OpenSSL does not support being initialized twice.

If this is the case, please move or add the libssh2_init() call into your
application startup, immediately on startup, before any user interaction.

Then only call libssh2_session_init() in your SFTP constructor.

Let me know how it goes.


Thanks Peter,

I followed your suggestion...

I added the libssh2_init() call to my app startup, which resulted in the same crash BUT the macOS crash report produced this time contained some info that nudged me to the right direction - which eventually helped solve the issue.

Bottom line: the issue is solved - and I'm grateful for all the feedback I received here.


Now, I don't have a single answer as to what caused the issue - as it seems to be different for two Xcode projects of the same app (which contain different versions of libssh2). I hope to find the least confusing way of describing it, if anyone is curious:


Last year, I adopted a new licensing system (namely SoftwareKey.com - which is a great licensing platform btw). The aforementioned crash log mentioned the new licensing framework (.framework) I'm using in my apps.

I went through SoftwareKey's downloads again and found out that they specifically mention that their libraries use libssl/libcrypto (as well as libcurl and libxml). And that it can cause conflicts if the host app is also using those libraries. For which purpose they also include a "no-dependencies" .a library which, naturally, doesn't include those 3rd-party libs - and will rely on those linked to the host app.

I didn't use that library. I was using their .framework framework in all apps (which framework includes all 3rd-party dependencies).

While it sounds like the obvious answer to my issue, it's only partially so.

After hours of testing I now have two cases:


CASE 1

-My original Xcode project which uses libssh2-1.4.3 (in a form of a folder with source files)

-I replaced the licensing .framework with their "no-dependencies" .a lib.

-It SOLVED the SFTP crashes issue.

-I also can build the project with or without the licensing library.

Pretty straightforward - and I'm fine with using older libssh2 version as long as it works.


CASE 2

-My updated Xcode project with the recent version, libssh2-1.9.0, as a .a library.

-Replacing licensing .framework with the "no-dependencies" lib does NOT help. In fact it causes build errors that prevent from compiling the app at all.

-If I just remove the licensing .framework without replacing it with anything else, I still cannot build the app due to the same build errors. That is, I can only compile the app with the licensing framework present.

-However, I did solve the SFTP crashes in this project too - but this time by relinking to a newer libcrypto library (something gave me a hint that libcrypto is at fault for something).

-Therefore, I do have a working app - which, however, cannot be compiled without the licensing framework.


If it makes any difference, the build errors I mentioned above are related to libssl:

Undefined symbol: _EVP_CIPHER_CTX_cleanup
Undefined symbol: _EVP_CIPHER_CTX_init


I'll be in touch regarding those errors with SoftwareKey.

Thanks again for all the help!


Leo


_______________________________________________
libssh2-devel https://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to