sola-st / DynaPyt

Dynamic analysis framework for Python
MIT License
56 stars 14 forks source link

Lines with annotated assignments are not instrumented #45

Closed Pascal-Joos closed 10 months ago

Pascal-Joos commented 10 months ago

Assignments with a variable annotation (like x: str = y) are not instrumented with write nor read hooks.

For example:

Input program:

def test_function():
    y = "Test"
    x: str = y
    return x

test_function()

Instrumented Code using dynapyt.analyses.TraceAll.TraceAll:

# DYNAPYT: DO NOT INSTRUMENT

import dynapyt.runtime as _rt

_dynapyt_ast_ = "/home/pascal/Projekt/dynamicslicing/tests/milestone2/test_14/program.py" + ".orig"
try:
    def test_function():
        _rt._func_entry_(_dynapyt_ast_, 0, [], "test_function")
        y = _rt._write_(_dynapyt_ast_, 2, _rt._str_(_dynapyt_ast_, 1, "Test"), [lambda: y])
        x: str = y
        return _rt._read_(_dynapyt_ast_, 3, lambda: x)
        _rt._func_exit_(_dynapyt_ast_, 0, "test_function")

    _rt._call_(_dynapyt_ast_, 5, _rt._read_(_dynapyt_ast_, 4, lambda: test_function), False, [], {})
except Exception as _dynapyt_exception_:
    _rt._catch_(_dynapyt_exception_)

Expected Instrumentation:

# DYNAPYT: DO NOT INSTRUMENT

import dynapyt.runtime as _rt

_dynapyt_ast_ = "/home/pascal/Projekt/dynamicslicing/tests/milestone2/test_14/program.py" + ".orig"
try:
    def test_function():
        _rt._func_entry_(_dynapyt_ast_, 0, [], "test_function")
        y = _rt._write_(_dynapyt_ast_, 2, _rt._str_(_dynapyt_ast_, 1, "Test"), [lambda: y])
        x: str = _rt._write_(_dynapyt_ast_, 4, _rt._read_(_dynapyt_ast_, 3, lambda: y), [lambda: x])
        return _rt._read_(_dynapyt_ast_, 5, lambda: x)
        _rt._func_exit_(_dynapyt_ast_, 0, "test_function")

    _rt._call_(_dynapyt_ast_, 7, _rt._read_(_dynapyt_ast_, 6, lambda: test_function), False, [], {})
except Exception as _dynapyt_exception_:
    _rt._catch_(_dynapyt_exception_)
AryazE commented 10 months ago

Thanks a lot! Good catch. I will try to fix it soon.

AryazE commented 10 months ago

This should be fixed with the latest commit. Feel free to reopen if the issue persists.