Releases: leibnitz27/cfr
0.152
0.152
Ok, it's been almost 10 months since I last published a release. Guilt release time!
- Handle overly lengthy static enum initialisers.
- Fix possible loop in conditional condenser.
- Optional resugaring of unobfuscated retrolambda.
- Relink external constants where possible
- Be more restrictive inlining lvalues in the presence of possible side effects
- Fix Constantlinks relinking (thanks Marcono1234)
- Docs fixes (thanks YannisBft)
- Fix race when decompiling with multiple drivers in parallel
- Support enum changes in Java 15+
- Tweak record support for Java 15+ changes
- Fix stack overflow when determining original bytecode location (when showing bytecode loc)
- Support for sealed classes
- Fix possible infinite loop in changeassignment rewriter
- Improve byte data performance (thanks CoolMineman)
0.151
As usual, please check the change log for the real details, (and for linked issues, thanks to all those who submit issues!)
Various improvements for ECJ specific patterns.
Improvement for methodhandle LDCs (thanks graxcode)
Fix bug with inline assignment inside constructor prelude
Various nasty assert cases
Handle malicious signatures causing stack overflow
Handle unusual static initialiser access.
Propagate bytecode location (in theory, this can be used to improve debugger support!)
Handle dynamic descriptor mismatch obfuscation
Handle duff device switch bytecode
Handle basic integer (eg /0) control flow obfuscation. (--antiobf true)
Handle .getClass control flow obfuscation.
Don't resugar negative sized arrays (thanks x4e)
Handle basic loop index obfuscation (confusing offset constants).
(optional with --constobf) fold decompiled constant expressions (thanks ColE) CFR won't do this unless asked as it tries to be true to the bytecode!
Tweak recovery order to avoid using more aggressive passes if they don't improve things.
Fix for package info annotation order.
0.150
- Fix possible static shadowing (thanks ovf)
- Use signature throws info unless provably wrong.
- Fix possible infinite loop with infinite signature (thanks marcono1234)
- Issue with empty enums (")
- Handle switch expressions inside enum constructors (")
- Switch expressions buried inside super/this constructor calls (")
- Improve switch breaks after topsort (")
- Remove illegal array iterator resugaring (thanks mrdos)
- Verify signatures more aggressively
- Fix possible stack overflow delegating clash-resolved type (thanks rmrfchik)
- Reduce application of Kotlin switch pattern
- Applying obfuscation remapping file can cause NPE (thanks rybozymer)
- Remove dangling CMPS in unusual bytecode (thanks graxcode)
- Handle exit-monitor is casted entry monitor (")
- Don't break after terminal in unstructured loop (")
- Improve SSA analysis performance (thanks edclarke)
- Allow (explicit only) disabling of method scoped/anonymous classes. (thanks andrewleech)
0.149
Too much to list (see commits since previous release) - I really must cut releases more often, but:
Lots of annotation fixes (perfect recovery of annotations is a whole new dimension of pain). (Thanks Marcono1234 (contrib))
Support for Java 14 record types
Support for Java 14 instanceof pattern matching
Update switch expressions to use final 'yield' syntax instead of 'break'.
Fix for issue with immediately accessed array.
Several fixes around cast ambiguity (Thanks Marcono1234)
Handle unverifiable jumps (example)
Tweak class names when O/S can't handle them
Several fixes for ECJ generated code (Thanks Marcono1234)
Improve literal formatting (Thanks SimonWanner (contrib))
Explicitly display receiver parameters if required by annotations. (Thanks Marcono1234)
Token stream dumper for API usage (Thanks Cubixity (contrib))
0.148
- Adapt to changes in ecj's output of switch-on-enum
- Many small fixes for handling obfuscation mapping files (thanks Marcono1234)
- Work on (unfinished) token output stream (thanks cubixity)
- Fix for regression on pretty printing of inner classes
0.147 release
- Support for deobfuscation mapping files. (thanks samuel)
- Fix extraneous array creation (thanks caagr98)
- Handle duplicate target shared between disconnected switches (thanks evelynsubarrow)
- Reduce over-aggressive eclipse pass (thanks caagr98)
- Allow try resources to be collapsed
- Fail gracefully if a lambda body is recursive (what, scala?!) (thanks kolanich)
- Handle module definition classes (thanks metatech)
- Fix for effectively empty try requiring topsort
- Allow filter on imports, to force FQN.
- Fix overuse of boxed constant names.
0.146
Tweak to improve hex usage
Fix bound on unicode
Less paranoia with regards to operation exceptions.
Add recovery phase which tweaks heuristics for topsort
Fix issue with member lifting
Handle odd kotlin explicit generic return type from constructor
introduce explicitly ignored variables if we need to preserve a calculation
Handle a form of string switch in java more like kotlin's (don't know origin!)
Fix incorrect use of explicit super type what calling indirect super methods.
0.145
- Improve support for JVM9+'s multi version jar.
- Fix bug in nested string resugaring. (Thanks dmitryg)
- Improve sugaring around some bad bool casts.
- Some tidying to improve decompilation of hand written classfiles. (See SootOptimisationTests).
- Where possible, collapse multiple JSRs.
- Fix bad preincrement in some java6 code.
- Fix typo in java 12+ switch expressions. (Thanks timothyp)
- Improve iter loops where we can unbox immediately.
- Remove more pointless super()s
0.144
Fix leakage of internal class names in accesses of enclosing anonymous classes. (Thanks dmitryg)
Pseudocode support for JVM11+'s dynamic constants. (Thanks JavierM)
0.141
Switch expressions in Java 13 (and with --switchexpression true for earlier)!
Improved reconstruction of Jdk 13 try-resource blocks. (bytecode style has changed...)
Fix regresssion with splitting exception handler. (Thanks scoleman)
Nop isolated stack variables to avoid reordering under a nasty obfuscation. (Thanks yanwentao)
Fix non determinism in resolving type clash in multi-exception handler. (Thanks borisk
Warn if type clash resolution leads to void variables.
Fix truncation issue with naming under huge bytecode.
Improve type clashes in iterated arrays.
Reduce aggressive lifting of field init from constructor.
Remove varargs spam.