Guardsquare / proguard

ProGuard, Java optimizer and obfuscator
https://www.guardsquare.com/en/products/proguard
GNU General Public License v2.0
2.82k stars 406 forks source link

Multiple Frames Printed on the Same Line #432

Closed alonalbert closed 2 weeks ago

alonalbert commented 3 weeks ago

in version 7.1.1 and earlier, if a obfuscated stack frame resolves to multiple clear frames, they are printed as multiple lines:

Version 7.1.1:

    at com.example.myapplication.Foo.foo(Foo.java:7)
    at com.example.myapplication.MainActivity.onClick(MainActivity.java:38)
    at com.example.myapplication.MainActivity.Greeting$lambda$1$lambda$0(MainActivity.java:43)
    at S0.MainActivity$$ExternalSyntheticLambda0.invoke(MainActivity.java:0)

Version 7.5.0: But newer versions print them in a single line:

    at com.example.myapplication.Foo.foo(Foo.java:7)    at com.example.myapplication.MainActivity.onClick(MainActivity.java:38)     at com.example.myapplication.MainActivity.Greeting$lambda$1$lambda$0(MainActivity.java:43)  at S0.MainActivity$$ExternalSyntheticLambda0.invoke(MainActivity.java:0)

The problem seems to be in in ReTrace.handle():

Frames lines are appended to a StringBuilder:

                    result.append(trimmedLine);

Without a newline. This should probably be changed to:

                    result.append(trimmedLine);
                    if (retracedFrames.hasNext()) {
                        result.append("\n");
                    }

Sending a PR.