先贴上关键日志
第一眼看到日志,以为是缺少了Arm64 的so文件,查看后发现并没缺少;
无奈之下,只有复现这个Crash,一点点缩小排查范围;最终将问题的矛头指向了项目中Native 层Md5加密的地方:
extern "C" JNIEXPORT jstring JNICALL
Java_com_symbol_business_NdkMethods_signatureParams(JNIEnv *env, jclass type, jstring params_) {
if (is_verify == 0) {
return env->NewStringUTF("error signature");
}
const char *params = env->GetStringUTFChars(params_, 0);
string signature_str(params);
signature_str.insert(0, EXTRA_SIGNATURE);
signature_str = signature_str.substr(0, signature_str.length() - 2);
MD5_CTX *ctx = new MD5_CTX();
MD5Init(ctx);
MD5Update(ctx, (unsigned char *) signature_str.c_str(), (unsigned int) signature_str.length());
unsigned char digest[16] = {0};
MD5Final(ctx, digest);
//char md5_str[32] = {0};
char md5_str[33] = {0};
for (int i = 0; i < 16; i++) {
sprintf(md5_str, "%s%02x", md5_str, digest[i]);
}
env->ReleaseStringUTFChars(params_, params);
return env->NewStringUTF(md5_str);
}
根据报错日志,我将以上代码中注释掉的那一行改为下面那一行。异常崩溃就好了,我也是百思不得解;
Md5加密32位的不应该是md5_str[32]吗?
原来md5_str[32]应该是md5_str[33]留一位给/0结束符;
否则就会报错了;问题解决;如有不对,望指正;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)