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