mariana-trench icon indicating copy to clipboard operation
mariana-trench copied to clipboard

Some functions will get stuck when running to `fixpoint.run(AnalysisEnvironment::initial());`

Open houugen opened this issue 2 years ago • 3 comments

Bug

In the process of analyzing an app, it is found that only the first round of method analysis is performed, and the next round cannot be entered. Through the observation of the log and debug, it is a function processing thread that is stuck

Interprocedural.cpp --> auto new_model = analyze(context, registry, old_model); --> fixpoint.run(AnalysisEnvironment::initial()); (key point)

Solution: Hope to increase thread timeout at context.scheduler->schedule

houugen avatar Dec 16 '22 08:12 houugen

Hi @houugen,

In theory, Mariana Trench should always converge during its analysis. If it does not terminate, there is a bug in the analysis. How long has it been stuck on this function? How can I reproduce the bug? Could you share the apk?

arthaud avatar Dec 16 '22 18:12 arthaud

Hi @houugen,

In theory, Mariana Trench should always converge during its analysis. If it does not terminate, there is a bug in the analysis. How long has it been stuck on this function? How can I reproduce the bug? Could you share the apk?

Sorry, i can't provide apk because of some privacy

stuck here forever image

The problematic function is BasePlayerImpl;.<init>:(Landroid/content/Context;L../PlayerConfig;)V

public BasePlayerImpl(Context context, PlayerConfig playerConfig) {
    this.x = context;
    this.y = playerConfig;
    this.f.aq = this.y;
    Profile.initProfile("xx", playerConfig.f6908a, context);
    this.f.K = this;
    this.f.I = this;
    this.f.J = this;
    this.f.a((MediaPlayer.OnErrorListener) this);
    this.f.M = this;
    this.f.L = this;
    this.f.N = this;
    this.f.ab = this;
    this.f.Q = this;
    this.f.R = this;
    this.f.S = this;
    this.f.T = this;
    this.f.W = this;
    this.f.U = this;
    this.f.ad = this;
    this.f.Z = this;
    this.f.aa = new OnLoadingStatusListenerNoTrack() { 
        @Override 
        public final void onStartLoading() {
            BasePlayerImpl.this.w();
        }

        @Override 
        public final void onEndLoading() {
            BasePlayerImpl.this.x();
        }
    };
    this.f.O = this;
    this.f.ai = this;
    this.f.X = this;
    this.f.Y = new OnNetworkSpeedPerMinute() { 
        @Override 
        public final void onSpeedUpdate(int i) {
            for (PlayStatisticListener playStatisticListener : BasePlayerImpl.this.h) {
                playStatisticListener.onInfo(2300, i, 0, null, 0L);
            }
        }

        @Override 
        public final void onNetWorkIncome(int i) {
            for (PlayStatisticListener playStatisticListener : BasePlayerImpl.this.h) {
                playStatisticListener.onInfo(60001, i, 0, null, 0L);
            }
        }

        @Override 
        public final void onNetWorkSpeed(Object obj) {
            for (PlayStatisticListener playStatisticListener : BasePlayerImpl.this.h) {
                playStatisticListener.onInfo(60002, 0, 0, obj, 0L);
            }
        }
    };
    this.f.a((BaseMediaPlayer.OnPlayHeartListener) this);
    this.f.ae = this;
    this.f.ag = this;
    this.f.ah = this;
    this.f.ak = this;
    this.f.aj = this;
    this.f.ac = this;
    this.f.al = this;
    this.f.ag = this;
    this.f.V = this;
    this.f.P = this;
    this.f.af = this;
    this.f.am = this;
    this.f.an = this;
    this.f.ao = this;
    this.f.H = this;
    this.f.A = new DefaultDataSourceProcessor();
    BaseMediaPlayer baseMediaPlayer = this.f;
    int i = playerConfig.e;
    if (i == 1) {
        baseMediaPlayer.t = true;
    } else if (i == 3) {
        baseMediaPlayer.B = true;
    } else if (i == 2) {
        baseMediaPlayer.t = true;
        baseMediaPlayer.B = true;
    }
}

houugen avatar Dec 17 '22 05:12 houugen