提交 fc4dcd2d 编写于 作者: S Skylot

core: prevent some null crash on resource decoding

上级 4e07d80e
...@@ -64,7 +64,7 @@ public class ResXmlGen { ...@@ -64,7 +64,7 @@ public class ResXmlGen {
cw.startLine(); cw.startLine();
cw.add('<').add(ri.getTypeName()).add(' '); cw.add('<').add(ri.getTypeName()).add(' ');
String itemTag = "item"; String itemTag = "item";
if (ri.getTypeName().equals("attr") && ri.getNamedValues().size() > 0) { if (ri.getTypeName().equals("attr") && !ri.getNamedValues().isEmpty()) {
cw.add("name=\"").add(ri.getKeyName()); cw.add("name=\"").add(ri.getKeyName());
int type = ri.getNamedValues().get(0).getRawValue().getData(); int type = ri.getNamedValues().get(0).getRawValue().getData();
if ((type & ValuesParser.ATTR_TYPE_ENUM) != 0) { if ((type & ValuesParser.ATTR_TYPE_ENUM) != 0) {
...@@ -126,7 +126,7 @@ public class ResXmlGen { ...@@ -126,7 +126,7 @@ public class ResXmlGen {
String nameStr = vp.decodeNameRef(value.getNameRef()); String nameStr = vp.decodeNameRef(value.getNameRef());
String valueStr = vp.decodeValue(value.getRawValue()); String valueStr = vp.decodeValue(value.getRawValue());
if (!typeName.equals("attr")) { if (!typeName.equals("attr")) {
if (valueStr.equals("0")) { if (valueStr == null || valueStr.equals("0")) {
valueStr = "@null"; valueStr = "@null";
} }
if (nameStr != null) { if (nameStr != null) {
...@@ -154,6 +154,9 @@ public class ResXmlGen { ...@@ -154,6 +154,9 @@ public class ResXmlGen {
} }
private void addSimpleValue(CodeWriter cw, String typeName, String itemTag, String attrName, String attrValue, String valueStr) { private void addSimpleValue(CodeWriter cw, String typeName, String itemTag, String attrName, String attrValue, String valueStr) {
if (valueStr == null) {
return;
}
if (valueStr.startsWith("res/")) { if (valueStr.startsWith("res/")) {
// remove duplicated resources. // remove duplicated resources.
return; return;
......
package jadx.core.xmlgen.entry; package jadx.core.xmlgen.entry;
import jadx.core.xmlgen.ParserConstants;
import jadx.core.xmlgen.ResTableParser;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -11,9 +8,13 @@ import java.util.ArrayList; ...@@ -11,9 +8,13 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import jadx.core.xmlgen.ParserConstants;
import jadx.core.xmlgen.ResTableParser;
public class ValuesParser extends ParserConstants { public class ValuesParser extends ParserConstants {
private static final Logger LOG = LoggerFactory.getLogger(ValuesParser.class); private static final Logger LOG = LoggerFactory.getLogger(ValuesParser.class);
...@@ -44,6 +45,7 @@ public class ValuesParser extends ParserConstants { ...@@ -44,6 +45,7 @@ public class ValuesParser extends ParserConstants {
androidResMap = androidParser.getResStorage().getResourcesNames(); androidResMap = androidParser.getResStorage().getResourcesNames();
} }
@Nullable
public String getValueString(ResourceEntry ri) { public String getValueString(ResourceEntry ri) {
RawValue simpleValue = ri.getSimpleValue(); RawValue simpleValue = ri.getSimpleValue();
if (simpleValue != null) { if (simpleValue != null) {
...@@ -63,12 +65,14 @@ public class ValuesParser extends ParserConstants { ...@@ -63,12 +65,14 @@ public class ValuesParser extends ParserConstants {
return strList.toString(); return strList.toString();
} }
@Nullable
public String decodeValue(RawValue value) { public String decodeValue(RawValue value) {
int dataType = value.getDataType(); int dataType = value.getDataType();
int data = value.getData(); int data = value.getData();
return decodeValue(dataType, data); return decodeValue(dataType, data);
} }
@Nullable
public String decodeValue(int dataType, int data) { public String decodeValue(int dataType, int data) {
switch (dataType) { switch (dataType) {
case TYPE_NULL: case TYPE_NULL:
...@@ -100,7 +104,9 @@ public class ValuesParser extends ParserConstants { ...@@ -100,7 +104,9 @@ public class ValuesParser extends ParserConstants {
if (androidRi != null) { if (androidRi != null) {
return "@android:" + androidRi; return "@android:" + androidRi;
} }
if (data == 0) return "0"; if (data == 0) {
return "0";
}
return "?unknown_ref: " + Integer.toHexString(data); return "?unknown_ref: " + Integer.toHexString(data);
} }
return "@" + ri; return "@" + ri;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册