Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[java] STARVATION: False Negative in Infer analysis results after converting anonymous classes to lambda expressions #1776

Open
mohui1999 opened this issue Jul 9, 2023 · 1 comment

Comments

@mohui1999
Copy link

This issue is similar with issue #1775 .

Environment

Infer Version: v1.1.0-f93cb281ed
Operating System: Ubuntu 20.04.5 LTS

Description:

We made modifications to the IndirectStarvation.java file, where we converted anonymous classes to lambda expressions. After making this change, we ran the Infer analysis using the following command: sudo make direct_java_starvation-whole-program_test. However, we observed inconsistencies between the results in issues.exp.test and the expected results in issues.exp.

We expect Infer to detect certain converted code to get results in the issues.exp.test file similar to the ones mentioned in issues.exp. However, the result for IndirectStarvation.java is different. The STARVATION issue does not appear in issues.exp.test. Therefore, we consider it a false negative.

Steps to Reproduce:

  1. Convert anonymous classes to lambda expressions in IndirectStarvation.java.
  2. Run the command: sudo make direct_java_starvation-whole-program_test.
  3. Compare the analysis results in issues.exp.test with the expected results in issues.exp.

Code Samples:

Original code in IndirectStarvation.java:

class IndirectStarvation {
    static Binder binder;

    @ForUiThread
    private final Executor mUiThreadExecutor = null;

    @ForNonUiThread
    private final Executor mNonUiThreadExecutor = null;

    private static void doTransact() {
        try {
            binder.transact(0, null, null, 0);
        } catch (RemoteException e) {
        }
    }

    Object monitorA;

    public void postBlockingCallToBackgroundThreadAndLockBad() {
        mUiThreadExecutor.execute(
            new Runnable() {
                @Override
                public void run() {
                    synchronized (monitorA) {
                    }
                }
            });

        mNonUiThreadExecutor.execute(
            new Runnable() {
                @Override
                public void run() {
                    synchronized (monitorA) {
                        doTransact();
                    }
                }
            });
    }
}

Converted code in IndirectStarvation.java:

class IndirectStarvation {
    static Binder binder;

    @ForUiThread
    private final Executor mUiThreadExecutor = null;

    @ForNonUiThread
    private final Executor mNonUiThreadExecutor = null;

    private static void doTransact() {
        try {
            binder.transact(0, null, null, 0);
        } catch (RemoteException e) {
        }
    }

    Object monitorA;

    public void postBlockingCallToBackgroundThreadAndLockBad() {
        mUiThreadExecutor.execute(() -> {
            synchronized (monitorA) {
            }
        });

        mNonUiThreadExecutor.execute(() -> {
            synchronized (monitorA) {
                doTransact();
            }
        });
    }
}

Content in issue.exp:

codetoanalyze/java/starvation-whole-program/IndirectStarvation.java, IndirectStarvation.postBlockingCallToBackgroundThreadAndLockBad():void, 32, STARVATION, no_bucket, ERROR, [[Trace 1] `void IndirectStarvation.postBlockingCallToBackgroundThreadAndLockBad()`,Method call: `void IndirectStarvation$1.run()`, locks `this.this$0.monitorA` in `class IndirectStarvation$1`,[Trace 2] `void IndirectStarvation.postBlockingCallToBackgroundThreadAndLockBad()`,Method call: `void IndirectStarvation$2.run()`, locks `this.this$0.monitorA` in `class IndirectStarvation$2`,Method call: `void IndirectStarvation.doTransact()`,calls `boolean Binder.transact(int,Parcel,Parcel,int)`]
@HKMANOJ
Copy link

HKMANOJ commented Aug 13, 2023

Hi @mohui1999 i am interested to contribute for this can i take up this task

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants