fix: prevent NPE during decode app with no matching resId for resource

This commit is contained in:
Connor Tumbleson 2020-11-27 17:40:07 -05:00 committed by Connor Tumbleson
parent cd7405d31b
commit b896b4491a

View File

@ -21,6 +21,7 @@ import android.util.TypedValue;
import brut.androlib.AndrolibException; import brut.androlib.AndrolibException;
import brut.androlib.res.data.ResID; import brut.androlib.res.data.ResID;
import brut.androlib.res.xml.ResXmlEncoders; import brut.androlib.res.xml.ResXmlEncoders;
import brut.common.BrutException;
import brut.util.ExtDataInput; import brut.util.ExtDataInput;
import com.google.common.io.LittleEndianDataInputStream; import com.google.common.io.LittleEndianDataInputStream;
import java.io.DataInput; import java.io.DataInput;
@ -339,16 +340,16 @@ public class AXmlResourceParser implements XmlResourceParser {
// some attributes will return "", we must rely on the resource_id and refer to the frameworks // some attributes will return "", we must rely on the resource_id and refer to the frameworks
// to match the resource id to the name. ex: 0x101021C = versionName // to match the resource id to the name. ex: 0x101021C = versionName
if (value.length() != 0 && !android_ns.equals(getAttributeNamespace(index))) { if (value.length() == 0 || android_ns.equals(getAttributeNamespace(index))) {
return value;
} else {
try { try {
int resourceId = getAttributeNameResource(index);
if (resourceId != 0) {
value = mAttrDecoder.decodeManifestAttr(getAttributeNameResource(index)); value = mAttrDecoder.decodeManifestAttr(getAttributeNameResource(index));
} catch (AndrolibException e) { }
} catch (AndrolibException | NullPointerException e) { }
} }
return value; return value;
} }
}
@Override @Override
public int getAttributeNameResource(int index) { public int getAttributeNameResource(int index) {