Library to read, write, analyze, and process java bytecode
PGD-247
)CfaUtil.toDot(cfa)
, example VisualizeCfa
).T17091
)T17090
)ProgramLocationDependentTransferRelation
into forward and backward variants.ClassPoolClassLoader
utility for loading ProGuardCORE classes.Several improvements to Kotlin metadata initialization now allow building the Kotlin metadata model for library classes (LibraryClass
):
KotlinMetadataInitializer
provides a new public method initialize(Clazz, int, int[], String[], String[], int, String, String)
to initialize
the Kotlin metadata model for a given class.ClassReader
can now build the Kotlin metadata model by setting includeKotlinMetadata
to true
.LibraryClassReader
can now read the Kotlin metadata annotation and provide the components to a consumer.UnsupportedKotlinMetadata
type is now assigned by the KotlinMetadataInitializer
if the Kotlin metadata model
could not be initialized correctly.ExecutingInvocationUnit
now loads values from static final fields.<anonymous>
. (T16483
)CodeAttributes
contributing into CFA.CodeAttributes
considered by the CallResolver
.ExecutingIvocationUnit
and ParticularReferenceValue
.ParticularReferenceValue
sanity checks now take inheritance into consideration, improving call analysis. (T15197
)ClassUtil#internalMethodParameterCount
.PartialEvaluator
that could result in
trying to create an internal type string from a string that was already an internal type. (T15513
)-Xno-optimized-callable-references
compiler option. (T16486
)PGC has different representation for type string variables:
com.guardsquare.SomeClass
com/guardsquare/SomeClass
type
): Lcom/guardsquare/SomeClass;
(for arrays e.g. [I
, [Ljava/lang/Object;
)com/guardsquare/SomeClass
(for arrays this is their internal type e.g. [I
, [Ljava/lang/Object;
)See proguard.classfile.util.ClassUtil
for useful methods to convert between the different representations.
Since internal class name and type were used ambiguously, from version 9.0.1 the internal type is used
consistently whenever we have a variable named type
.
Since this was not the case, this update might cause some type
variables switching from the internal class name
notation to the internal type notation, potentially breaking some logic if types are used by an external
application using proguard-core.
CPA is a formalism for data flow analysis allowing seamless composition of various analyses and model checking techniques. Thus, it adds a framework for systematic development and extension of static analyses in a uniform structured way.
Taint analysis is the first ProGuardCORE CPA. Its goal is to detect data flow between source and sink method calls, which is useful for detecting bugs and security flaws.
The Taint Analysis manual page provides more information.
T14726
)Call#getArgumentCount()
to be correct even if the actual argument values
could not be calculated or have been cleared. (TT14632
)ExecutingInvocationUnit
parameters array even when an exception happens.T13973
)T14060
)KotlinMetadataVersion
to KotlinMetadataWriter
/ KotlinModuleWriter
.kotlinx.metadata
dependency to version 0.3).MemberDescriptorReferencedClassVisitor
for visiting referenced Kotlin inline class parameters. (T13653
)CallResolver
erroneously creating call edges to unimplemented interface methods.DominatorCalculator
skip methods with an empty CodeAttribute
.ClassReferenceFixer
. (PGD-208
)ClassReferenceInitializer
.ClassReferenceInitializer
. (PGC-28
, PGD-194
)KotlinInterfaceToDefaultImplsClassVisitor
replaced by KotlinClassToDefaultImplsClassVisitor
.IS_INLINE
and replaced with IS_VALUE
(T4771
).T5405
)ClassValue
type arguments. (T5406
)T4774
)StringIndexOutOfBoundsException
while trimming attribute value spaces in SignedJarWriter
. (T7004
)referencedClass
of Values generated by the ExecutingInvocationUnit
. (T6031
)StackOverflowError
when using an AttributeVisitor
to visit runtime invisible type annotations. (PGD-182
)StringIndexOutOfBoundsException
in KotlinCallableReferenceInitializer
. (T5927
)NullPointerException
in KotlinInterClassPropertyReferenceInitializer
. (T6138
)InstructionWriter
. (T5721
)ClassFormatError
due to adding multiple annotation attributes when processing Kotlin code.NullPointerException
due to missing classes in ClassReferenceInitializer
.T7056
)