Пример #1
0
def test_parenthesized_msg():
    """Parse an exception with a exception message in parentheses."""
    java_exc = javautil.parse_java_stack_trace(EXC_MSG_WITH_PARENS)
    assert java_exc.exception_class == "Exception"
    assert (java_exc.exception_message ==
            'Error(\n\nGeneral Error: "No subscriptions created yet.")')
    assert java_exc.stack == ["at org.File.function(RustError.kt:4)"]
    assert java_exc.additional == []
Пример #2
0
def test_parse_unindented_caused_by():
    """Parse an exception with an unindented "Caused by" section."""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_UNINDENTED_CAUSED_BY)
    assert java_exc.exception_class == "Exception"
    assert java_exc.exception_message == "msg"
    assert java_exc.stack == ["at org.File.function(File.java:100)"]
    assert java_exc.additional == [
        "Caused by: Exception2: msg2; no stack trace available"
    ]
Пример #3
0
def test_parse_suppressed():
    """Parse an exception with a "Suppressed" section"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_SUPPRESSED)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == 'msg'
    assert java_exc.stack == ['at org.File.function(File.java:100)']
    assert java_exc.additional == [
        'Suppressed: Exception2: msg2', '\tat org.File.function(File.java:101)'
    ]
Пример #4
0
def test_parse_caused_by():
    """Parse an exception with a "Caused by" section with no stack"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_CAUSED_BY)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == 'msg'
    assert java_exc.stack == ['at org.File.function(File.java:100)']
    assert java_exc.additional == [
        'Caused by: Exception2: msg2; no stack trace available'
    ]
Пример #5
0
def test_parse_basic():
    """Parse a basic exception with a class, message, and some stack lines"""
    java_exc = javautil.parse_java_stack_trace(EXC)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == 'msg'
    assert java_exc.stack == [
        'at org.File.function(File.java:100)',
        'at org.File.function2(File.java:200)'
    ]
    assert java_exc.additional == []
Пример #6
0
def test_parse_suppressed():
    """Parse an exception with a "Suppressed" section"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_SUPPRESSED)
    assert java_exc.exception_class == "Exception"
    assert java_exc.exception_message == "msg"
    assert java_exc.stack == ["at org.File.function(File.java:100)"]
    assert java_exc.additional == [
        "\tSuppressed: Exception2: msg2",
        "\t\tat org.File.function(File.java:101)",
    ]
Пример #7
0
def test_parse_basic():
    """Parse a basic exception with a class, message, and some stack lines"""
    java_exc = javautil.parse_java_stack_trace(EXC)
    assert java_exc.exception_class == "Exception"
    assert java_exc.exception_message == "msg"
    assert java_exc.stack == [
        "at org.File.function(File.java:100)",
        "at org.File.function2(File.java:200)",
    ]
    assert java_exc.additional == []
Пример #8
0
def test_parse_caused_by():
    """Parse an exception with a "Caused by" section with no stack"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_CAUSED_BY)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == 'msg'
    assert java_exc.stack == [
        'at org.File.function(File.java:100)'
    ]
    assert java_exc.additional == [
        'Caused by: Exception2: msg2; no stack trace available'
    ]
Пример #9
0
def test_parse_suppressed():
    """Parse an exception with a "Suppressed" section"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_SUPPRESSED)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == 'msg'
    assert java_exc.stack == [
        'at org.File.function(File.java:100)'
    ]
    assert java_exc.additional == [
        'Suppressed: Exception2: msg2',
        '\tat org.File.function(File.java:101)'
    ]
Пример #10
0
    def action(self, raw_crash, raw_dumps, processed_crash, processor_meta):
        # This can contain PII in the exception message
        processed_crash['java_stack_trace_full'] = raw_crash['JavaStackTrace']

        try:
            java_exception = javautil.parse_java_stack_trace(raw_crash['JavaStackTrace'])
            java_stack_trace = java_exception.to_public_string()
        except javautil.MalformedJavaStackTrace:
            processor_meta.processor_notes.append('JavaProcessRule: malformed java stack trace')
            java_stack_trace = 'malformed'

        processed_crash['java_stack_trace'] = java_stack_trace
Пример #11
0
    def action(self, raw_crash, raw_dumps, processed_crash, processor_meta):
        # This can contain PII in the exception message
        processed_crash['java_stack_trace_full'] = raw_crash['JavaStackTrace']

        try:
            java_exception = javautil.parse_java_stack_trace(raw_crash['JavaStackTrace'])
            java_stack_trace = java_exception.to_public_string()
        except javautil.MalformedJavaStackTrace:
            processor_meta.processor_notes.append('JavaProcessRule: malformed java stack trace')
            java_stack_trace = 'malformed'

        processed_crash['java_stack_trace'] = java_stack_trace
Пример #12
0
def test_no_message():
    """Parse a basic exception with a class, message, and some stack lines"""
    java_exc = javautil.parse_java_stack_trace(EXC_NO_MESSAGE)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == ''
    assert java_exc.stack == [
        'at org.File.function(File.java:100)',
        'at org.File.function2(File.java:200)'
    ]
    assert java_exc.additional == []

    assert java_exc.to_public_string() == (
        'Exception\n'
        '\tat org.File.function(File.java:100)\n'
        '\tat org.File.function2(File.java:200)')
Пример #13
0
def test_no_message():
    """Parse a basic exception with a class, message, and some stack lines"""
    java_exc = javautil.parse_java_stack_trace(EXC_NO_MESSAGE)
    assert java_exc.exception_class == 'Exception'
    assert java_exc.exception_message == ''
    assert java_exc.stack == [
        'at org.File.function(File.java:100)',
        'at org.File.function2(File.java:200)'
    ]
    assert java_exc.additional == []

    assert java_exc.to_public_string() == (
        'Exception\n'
        '\tat org.File.function(File.java:100)\n'
        '\tat org.File.function2(File.java:200)'
    )
Пример #14
0
def test_parse_multi_line_msg():
    """Parse an exception where the exception message is multiple lines"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_MULTILINE_MSG)
    assert java_exc.exception_class == 'android.database.sqlite.SQLiteDatabaseLockedException'
    assert (
        java_exc.exception_message == 'database is locked (code 5)\n'
        '#################################################################\n'
        'Error Code : 5 (SQLITE_BUSY)\n'
        'Caused By : The database file is locked.\n'
        '\t(database is locked (code 5))\n'
        '#################################################################')
    assert java_exc.stack == [
        'at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)',  # noqa
        'at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:904)'  # noqa
    ]
    assert java_exc.additional == []
Пример #15
0
    def action(self, raw_crash, raw_dumps, processed_crash, processor_meta):
        # This can contain PII in the exception message
        processed_crash["java_stack_trace_raw"] = raw_crash["JavaStackTrace"]

        try:
            java_exception = javautil.parse_java_stack_trace(
                raw_crash["JavaStackTrace"]
            )
            java_stack_trace = java_exception.to_public_string()
        except javautil.MalformedJavaStackTrace:
            processor_meta["processor_notes"].append(
                "JavaProcessRule: malformed java stack trace"
            )
            java_stack_trace = "malformed"

        processed_crash["java_stack_trace"] = java_stack_trace
Пример #16
0
def test_parse_multi_line_msg():
    """Parse an exception where the exception message is multiple lines"""
    java_exc = javautil.parse_java_stack_trace(EXC_WITH_MULTILINE_MSG)
    assert java_exc.exception_class == 'android.database.sqlite.SQLiteDatabaseLockedException'
    assert (
        java_exc.exception_message ==
        'database is locked (code 5)\n'
        '#################################################################\n'
        'Error Code : 5 (SQLITE_BUSY)\n'
        'Caused By : The database file is locked.\n'
        '\t(database is locked (code 5))\n'
        '#################################################################'
    )
    assert java_exc.stack == [
        'at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)',  # noqa
        'at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:904)'  # noqa
    ]
    assert java_exc.additional == []
Пример #17
0
    def action(self, raw_crash, raw_dumps, processed_crash, processor_meta):
        # This can contain PII in the exception message
        processed_crash["java_stack_trace_raw"] = raw_crash["JavaStackTrace"]
        # FIXME(willkg): Remove java_stack_trace_full after January 2020.
        processed_crash["java_stack_trace_full"] = raw_crash["JavaStackTrace"]

        try:
            java_exception = javautil.parse_java_stack_trace(
                raw_crash["JavaStackTrace"]
            )
            java_stack_trace = java_exception.to_public_string()
        except javautil.MalformedJavaStackTrace:
            processor_meta.processor_notes.append(
                "JavaProcessRule: malformed java stack trace"
            )
            java_stack_trace = "malformed"

        processed_crash["java_stack_trace"] = java_stack_trace
Пример #18
0
    def action(self, raw_crash, raw_dumps, processed_crash, processor_meta):
        if "JavaStackTrace" in raw_crash:
            # The java_stack_trace_raw version can contain PII in the exception message
            # and should be treated as protected data
            processed_crash["java_stack_trace_raw"] = raw_crash[
                "JavaStackTrace"]

            # The java_stack_trace is a sanitizzed version of java_stack_trace_raw
            try:
                parsed_java_stack_trace = javautil.parse_java_stack_trace(
                    raw_crash["JavaStackTrace"])
                java_stack_trace = parsed_java_stack_trace.to_public_string()
            except javautil.MalformedJavaStackTrace:
                processor_meta["processor_notes"].append(
                    "JavaProcessRule: malformed JavaStackTrace")
                java_stack_trace = "malformed"

            processed_crash["java_stack_trace"] = java_stack_trace

        if "JavaException" in raw_crash:
            try:
                # The java_exception is a structured form of the stack trace
                java_exception = json.loads(raw_crash["JavaException"])
                javautil.validate_java_exception(java_exception)

                # The java_exception_raw value can have PII and should be treated
                # as protected data
                processed_crash["java_exception_raw"] = java_exception

                # The java_exception is a sanitized version
                processed_crash[
                    "java_exception"] = javautil.sanitize_java_exception(
                        java_exception)

            except (javautil.MalformedJavaException, json.JSONDecodeError):
                processor_meta["processor_notes"].append(
                    "JavaProcessRule: malformed JavaException")
Пример #19
0
def test_malformed(text):
    with pytest.raises(javautil.MalformedJavaStackTrace):
        javautil.parse_java_stack_trace(text)
Пример #20
0
def test_malformed(text):
    with pytest.raises(javautil.MalformedJavaStackTrace):
        javautil.parse_java_stack_trace(text)