diff --git a/pyproject.toml b/pyproject.toml index f7b0a69..e675501 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,6 +36,7 @@ dependencies = [ "pydantic==2.11.5", "pydantic-settings==2.9.1", "NSKeyedUnArchiver==1.5", + "python-dateutil==2.9.0.post0", ] requires-python = ">= 3.10" diff --git a/src/mvt/android/artifacts/tombstone_crashes.py b/src/mvt/android/artifacts/tombstone_crashes.py index 75b9cc2..f9f4531 100644 --- a/src/mvt/android/artifacts/tombstone_crashes.py +++ b/src/mvt/android/artifacts/tombstone_crashes.py @@ -8,6 +8,7 @@ from typing import List, Optional, Union import pydantic import betterproto +from dateutil import parser from mvt.common.utils import convert_datetime_to_iso from mvt.android.parsers.proto.tombstone import Tombstone @@ -254,12 +255,7 @@ class TombstoneCrashArtifact(AndroidArtifact): @staticmethod def _parse_timestamp_string(timestamp: str) -> str: - timestamp_date, timezone = timestamp.split("+") - # Truncate microseconds before parsing - timestamp_without_micro = timestamp_date.split(".")[0] + "+" + timezone - timestamp_parsed = datetime.datetime.strptime( - timestamp_without_micro, "%Y-%m-%d %H:%M:%S%z" - ) + timestamp_parsed = parser.parse(timestamp) # HACK: Swap the local timestamp to UTC, so keep the original time and avoid timezone conversion. local_timestamp = timestamp_parsed.replace(tzinfo=datetime.timezone.utc) diff --git a/tests/android/test_artifact_tombstones.py b/tests/android/test_artifact_tombstones.py index 487eb21..d1d5682 100644 --- a/tests/android/test_artifact_tombstones.py +++ b/tests/android/test_artifact_tombstones.py @@ -64,4 +64,4 @@ class TestTombstoneCrashArtifact: # We often don't know the time offset for a log entry and so can't convert everything to UTC. # MVT should output the local time only: # So original 2023-04-12 12:32:40.518290770+0200 -> 2023-04-12 12:32:40.000000 - assert tombstone_result.get("timestamp") == "2023-04-12 12:32:40.000000" + assert tombstone_result.get("timestamp") == "2023-04-12 12:32:40.518290" diff --git a/tests/android_bugreport/test_bugreport.py b/tests/android_bugreport/test_bugreport.py index cc9afec..5af58e8 100644 --- a/tests/android_bugreport/test_bugreport.py +++ b/tests/android_bugreport/test_bugreport.py @@ -9,6 +9,7 @@ from pathlib import Path from mvt.android.modules.bugreport.appops import Appops from mvt.android.modules.bugreport.getprop import Getprop from mvt.android.modules.bugreport.packages import Packages +from mvt.android.modules.bugreport.tombstones import Tombstones from mvt.common.module import run_module from ..utils import get_artifact_folder @@ -54,3 +55,8 @@ class TestBugreportAnalysis: def test_getprop_module(self): m = self.launch_bug_report_module(Getprop) assert len(m.results) == 0 + + def test_tombstones_modules(self): + m = self.launch_bug_report_module(Tombstones) + assert len(m.results) == 2 + assert m.results[1]["pid"] == 3559 diff --git a/tests/artifacts/android_data/bugreport/FS/data/tombstones/tombstone_00 b/tests/artifacts/android_data/bugreport/FS/data/tombstones/tombstone_00 new file mode 100644 index 0000000..f0dd1be --- /dev/null +++ b/tests/artifacts/android_data/bugreport/FS/data/tombstones/tombstone_00 @@ -0,0 +1,27 @@ +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +Build fingerprint: 'samsung/a10eea/a10:10/.190711.020/A105:user/release-keys' +Revision: '5' +ABI: 'arm' +Timestamp: 2021-09-29 17:43:49+0200 +pid: 9850, tid: 9893, name: UsbFfs-worker >>> /system/bin/adbd <<< +uid: 2000 +signal 6 (SIGABRT), code -1 (SI_QUEUE), fault addr -------- +Abort message: 'Check failed: payload.size() <= bytes_left (payload.size()=99, bytes_left=51) ' + r0 00000000 r1 000026a5 r2 00000006 r3 f11fad98 + r4 f11fadac r5 f11fad90 r6 0000267a r7 0000016b + r8 f11fada8 r9 f11fad98 r10 f11fadc8 r11 f11fadb8 + ip 000026a5 sp f11fad68 lr f20c23b7 pc f20c23ca + +backtrace: + #00 pc 000603ca /apex/com.android.runtime/lib/bionic/libc.so (abort+166) (BuildId: 320fbdc2a1289fadd7dacae7f2eb77a3) + #01 pc 00007e23 /system/lib/libbase.so (android::base::DefaultAborter(char const*)+6) (BuildId: a28585ee446ea17e3e6fcf9c907fff2a) + #02 pc 0000855f /system/lib/libbase.so (android::base::LogMessage::~LogMessage()+406) (BuildId: a28585ee446ea17e3e6fcf9c907fff2a) + #03 pc 000309cf /system/lib/libadbd.so (UsbFfsConnection::ProcessRead(IoBlock*)+814) (BuildId: 3645b175977ae210c156a57b25dfa599) + #04 pc 00030459 /system/lib/libadbd.so (UsbFfsConnection::HandleRead(TransferId, long long)+84) (BuildId: 3645b175977ae210c156a57b25dfa599) + #05 pc 00030349 /system/lib/libadbd.so (UsbFfsConnection::ReadEvents()+92) (BuildId: 3645b175977ae210c156a57b25dfa599) + #06 pc 00030169 /system/lib/libadbd.so (_ZZN16UsbFfsConnection11StartWorkerEvENKUlvE_clEv+504) (BuildId: 3645b175977ae210c156a57b25dfa599) + #07 pc 0002ff53 /system/lib/libadbd.so (_ZNSt3__114__thread_proxyINS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEZN16UsbFfsConnection11StartWorkerEvEUlvE_EEEEEPvSA_+26) (BuildId: 3645b175977ae210c156a57b25dfa599) + #08 pc 000a75b3 /apex/com.android.runtime/lib/bionic/libc.so (__pthread_start(void*)+20) (BuildId: 320fbdc2a1289fadd7dacae7f2eb77a3) + #09 pc 00061b33 /apex/com.android.runtime/lib/bionic/libc.so (__start_thread+30) (BuildId: 320fbdc2a1289fadd7dacae7f2eb77a3) + + diff --git a/tests/artifacts/android_data/bugreport/FS/data/tombstones/tombstone_01 b/tests/artifacts/android_data/bugreport/FS/data/tombstones/tombstone_01 new file mode 100644 index 0000000..d069910 --- /dev/null +++ b/tests/artifacts/android_data/bugreport/FS/data/tombstones/tombstone_01 @@ -0,0 +1,38 @@ +*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** +Build fingerprint: 'samsung/a10eea/a10:11/RP1A.200720.012/A105:user/release-keys' +Revision: '5' +ABI: 'arm' +Timestamp: 2023-08-21 23:28:59-0400 +pid: 3559, tid: 3568, name: tzts_daemon >>> /vendor/bin/tzts_daemon <<< +uid: 1000 +signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xe8b4d14c + r0 e8b4d14c r1 e8b4d14c r2 0000002b r3 00000004 + r4 00000000 r5 e8b4d14c r6 00000000 r7 00000000 + r8 e7ef78b0 r9 0000002b r10 e7ef7dad r11 e7ef7400 + ip 00000000 sp e7ef7208 lr e89f4b01 pc e89c273a + +backtrace: + #00 pc 0005f73a /apex/com.android.runtime/lib/bionic/libc.so (strlen_a15+54) (BuildId: fef5b751123147ea65bf3f4f798c9518) + #01 pc 00091afd /apex/com.android.runtime/lib/bionic/libc.so (__vfprintf+3364) (BuildId: fef5b751123147ea65bf3f4f798c9518) + #02 pc 000a68e5 /apex/com.android.runtime/lib/bionic/libc.so (vsnprintf+152) (BuildId: fef5b751123147ea65bf3f4f798c9518) + #03 pc 000051cf /system/lib/liblog.so (__android_log_vprint+74) (BuildId: 3fcead474cd0ecbdafb529ff176b0d13) + #04 pc 000012e8 /vendor/bin/tzts_daemon + +memory near r0: + e8b4d12c -------- -------- -------- -------- ................ + e8b4d13c -------- -------- -------- -------- ................ + e8b4d14c -------- -------- -------- -------- ................ + e8b4d15c -------- -------- -------- -------- ................ + e8b4d16c -------- -------- -------- -------- ................ + e8b4d17c -------- -------- -------- -------- ................ + e8b4d18c -------- -------- -------- -------- ................ + e8b4d19c -------- -------- -------- -------- ................ + e8b4d1ac -------- -------- -------- -------- ................ + e8b4d1bc -------- -------- -------- -------- ................ + e8b4d1cc -------- -------- -------- -------- ................ + e8b4d1dc -------- -------- -------- -------- ................ + e8b4d1ec -------- -------- -------- -------- ................ + e8b4d1fc -------- -------- -------- -------- ................ + e8b4d20c -------- -------- -------- -------- ................ + e8b4d21c -------- -------- -------- -------- ................ +