fix: load type spec if no TYPE_SPEC chunks (#3325)

This commit is contained in:
Connor Tumbleson 2023-09-11 06:24:23 -04:00 committed by GitHub
parent dd32a3c301
commit c07e4a92e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -260,10 +260,16 @@ public class ARSCDecoder {
private ResType readTableType() throws IOException, AndrolibException {
checkChunkType(ARSCHeader.XML_TYPE_TYPE);
int typeId = mIn.readUnsignedByte() - mTypeIdOffset;
// #3311 - Some older applications have no TYPE_SPEC chunks, but still define TYPE chunks.
if (mResTypeSpecs.containsKey(typeId)) {
mResId = (0xff000000 & mResId) | mResTypeSpecs.get(typeId).getId() << 16;
mTypeSpec = mResTypeSpecs.get(typeId);
} else {
mTypeSpec = new ResTypeSpec(mTypeNames.getString(typeId - 1), typeId);
addTypeSpec(mTypeSpec);
mPkg.addType(mTypeSpec);
}
mResId = (0xff000000 & mResId) | mTypeSpec.getId() << 16;
int typeFlags = mIn.readByte();
mIn.skipBytes(2); // reserved