00 pc 000000000002889c /data/app/~~e59sdqQ-X9HLkOm8B7xjCg==/com.xxx.app-Oryk7nRdrG9nJQza7heSYA==/lib/arm64/libmmkv.so [arm64-v8a::b18c4565b236796eefe43cb651009b06]
01 pc 0000000000028e38 /data/app/~~e59sdqQ-X9HLkOm8B7xjCg==/com.xxx.app-Oryk7nRdrG9nJQza7heSYA==/lib/arm64/libmmkv.so [arm64-v8a::b18c4565b236796eefe43cb651009b06]
02 pc 0000000000029e24 /data/app/~~e59sdqQ-X9HLkOm8B7xjCg==/com.xxx.app-Oryk7nRdrG9nJQza7heSYA==/lib/arm64/libmmkv.so [arm64-v8a::b18c4565b236796eefe43cb651009b06]
03 pc 000000000001ecc0 /data/app/~~e59sdqQ-X9HLkOm8B7xjCg==/com.xxx.app-Oryk7nRdrG9nJQza7heSYA==/lib/arm64/libmmkv.so [arm64-v8a::b18c4565b236796eefe43cb651009b06]
04 pc 0000000000019054 /data/app/~~e59sdqQ-X9HLkOm8B7xjCg==/com.xxx.app-Oryk7nRdrG9nJQza7heSYA==/lib/arm64/libmmkv.so [arm64-v8a::b18c4565b236796eefe43cb651009b06]
05 pc 0000000000222244 /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+148) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
06 pc 0000000000212b80 /apex/com.android.art/lib64/libart.so (nterp_helper+5648) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
07 pc 00000000002124c4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
08 pc 00000000002124c4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
09 pc 00000000002124c4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
10 pc 00000000002124c4 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
11 pc 00000000002132e4 /apex/com.android.art/lib64/libart.so (nterp_helper+7540) [arm64-v8a::5c55b02a7c405b33a3865d31aafbf3f9]
12 pc 000000000040175c /apex/com.android.art/javalib/arm64/boot.oat [arm64-v8a::41586ef256c8b26d2287aaa827b271c9]
The language of MMKV
Java
The version of MMKV
v1.2.12
The platform of MMKV
Android
The installation of MMKV
Maven
What's the issue?
A SIGSEGV (SEGV_MAPERR) null pointer exception occurs when the trim() method is called.
CRASHSTACK
` //堆栈1:decodeInt 0
00 pc 000000000002889c partialLoadFromFile (/data/orange-ci/workspace/Core/MMKV_IO.cpp:390 [Inline: memcpy]) [arm64-v8a]
1
01 pc 0000000000028e38 checkLoadData (/data/orange-ci/workspace/Core/MMKV_IO.cpp:293) [arm64-v8a]
2
02 pc 0000000000029e24 getDataForKey (/data/orange-ci/workspace/Core/MMKV_IO.cpp:466) [arm64-v8a]
3
03 pc 000000000001f538 getInt32 (/data/orange-ci/workspace/Core/MMKV.cpp:634) [arm64-v8a]
4
04 pc 0000000000018748 decodeInt (../../../../src/main/cpp/native-bridge.cpp:393) [arm64-v8a]
`
` //堆栈2:containsKey 0
00 pc 000000000002889c partialLoadFromFile (/data/orange-ci/workspace/Core/MMKV_IO.cpp:390 [Inline: memcpy]) []
1
01 pc 0000000000028e38 checkLoadData (/data/orange-ci/workspace/Core/MMKV_IO.cpp:293) []
2
02 pc 00000000000201f4 containsKey (/data/orange-ci/workspace/Core/MMKV.cpp:790) []
3
03 pc 0000000000019a64 containsKey (../../../../src/main/cpp/native-bridge.cpp:532) []
4
04 pc 000000000052a040 art_jni_trampoline+160
`
` //堆栈3:decodeString 0
00 pc 000000000002889c partialLoadFromFile (/data/orange-ci/workspace/Core/MMKV_IO.cpp:390 [Inline: memcpy]) [arm64-v8a]
1
01 pc 0000000000028e38 checkLoadData (/data/orange-ci/workspace/Core/MMKV_IO.cpp:293) [arm64-v8a]
2
02 pc 0000000000029e24 getDataForKey (/data/orange-ci/workspace/Core/MMKV_IO.cpp:466) [arm64-v8a]
3
03 pc 000000000001ecc0 getString (/data/orange-ci/workspace/Core/MMKV.cpp:545) [arm64-v8a]
4
04 pc 0000000000019054 decodeString (../../../../src/main/cpp/native-bridge.cpp:472) [arm64-v8a]
`
原因分析
根本原因与issue相同:#1190 ,crash发生的地方在:decodeData/containsKey——getDataForKey——checkLoadData——partialLoadFromFile——readActualSize访问文件映射内存地址时,内存地址为0空指针异常。