mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-30 22:34:24 +02:00
escape special characters on decode/encode
This commit is contained in:
parent
306b8f9260
commit
aecdc77648
@ -229,7 +229,8 @@ import java.util.*;
|
||||
String value;
|
||||
ResValueInt resValueInt=(ResValueInt) entryBlock.getResValue();
|
||||
if(resValueInt.getValueType()== ValueType.STRING){
|
||||
value=resValueInt.getValueAsString();
|
||||
value=ValueDecoder.escapeSpecialCharacter(
|
||||
resValueInt.getValueAsString());
|
||||
}else {
|
||||
value= ValueDecoder.decodeEntryValue(entryStore,
|
||||
entryBlock.getPackageBlock(),
|
||||
|
@ -141,7 +141,8 @@ public class XMLFileEncoder {
|
||||
continue;
|
||||
}
|
||||
if(attributeBag.isEqualType(AttributeValueType.STRING)) {
|
||||
xmlAttribute.setValueAsString(valueText);
|
||||
xmlAttribute.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(valueText));
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@ -155,7 +156,8 @@ public class XMLFileEncoder {
|
||||
xmlAttribute.setValueType(encodeResult.valueType);
|
||||
xmlAttribute.setRawValue(encodeResult.value);
|
||||
}else {
|
||||
xmlAttribute.setValueAsString(valueText);
|
||||
xmlAttribute.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(valueText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -51,10 +51,12 @@ class XMLValuesEncoderArray extends XMLValuesEncoderBag{
|
||||
bagItem.setTypeAndData(encodeResult.valueType,
|
||||
encodeResult.value);
|
||||
}else {
|
||||
bagItem.setValueAsString(valueText);
|
||||
bagItem.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(valueText));
|
||||
}
|
||||
}else {
|
||||
bagItem.setValueAsString(valueText);
|
||||
bagItem.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(valueText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,8 @@ class XMLValuesEncoderCommon extends XMLValuesEncoder{
|
||||
if(encodeResult!=null){
|
||||
entryBlock.setValueAsRaw(encodeResult.valueType, encodeResult.value);
|
||||
}else {
|
||||
entryBlock.setValueAsString(value);
|
||||
entryBlock.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,8 @@ class XMLValuesEncoderPlurals extends XMLValuesEncoderBag{
|
||||
bagItem.setType(ValueType.NULL);
|
||||
bagItem.setData(0);
|
||||
}else{
|
||||
bagItem.setValueAsString(valueText);
|
||||
bagItem.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(valueText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ class XMLValuesEncoderString extends XMLValuesEncoder{
|
||||
}
|
||||
@Override
|
||||
void encodeStringValue(EntryBlock entryBlock, String value){
|
||||
entryBlock.setValueAsString(value);
|
||||
entryBlock.setValueAsString(ValueDecoder.unEscapeSpecialCharacter(value));
|
||||
}
|
||||
@Override
|
||||
void encodeNullValue(EntryBlock entryBlock){
|
||||
@ -53,7 +53,7 @@ class XMLValuesEncoderString extends XMLValuesEncoder{
|
||||
if(value==null || ValueDecoder.isReference(value)){
|
||||
continue;
|
||||
}
|
||||
stringList.add(value);
|
||||
stringList.add(ValueDecoder.unEscapeSpecialCharacter(value));
|
||||
}
|
||||
getMaterials().addTableStringPool(stringList);
|
||||
}
|
||||
|
@ -66,7 +66,8 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{
|
||||
}
|
||||
bagItem.setData(getMaterials().resolveReference(valueText));
|
||||
}else if(attributeBag.isEqualType(AttributeValueType.STRING)) {
|
||||
bagItem.setValueAsString(valueText);
|
||||
bagItem.setValueAsString(ValueDecoder
|
||||
.unEscapeSpecialCharacter(valueText));
|
||||
}else if(EncodeUtil.isEmpty(valueText)) {
|
||||
bagItem.setTypeAndData(ValueType.NULL, 0);
|
||||
}else{
|
||||
@ -75,7 +76,7 @@ class XMLValuesEncoderStyle extends XMLValuesEncoderBag{
|
||||
bagItem.setTypeAndData(encodeResult.valueType,
|
||||
encodeResult.value);
|
||||
}else {
|
||||
bagItem.setValueAsString(valueText);
|
||||
bagItem.setValueAsString(ValueDecoder.unEscapeSpecialCharacter(valueText));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -468,7 +468,7 @@ import java.util.Set;
|
||||
int raw=getRawValue();
|
||||
String value;
|
||||
if(valueType==ValueType.STRING){
|
||||
value = getValueAsString();
|
||||
value = ValueDecoder.escapeSpecialCharacter(getValueAsString());
|
||||
}else {
|
||||
value = ValueDecoder.decode(entryStore,
|
||||
currentPackageId,
|
||||
|
@ -20,6 +20,7 @@ import com.reandroid.lib.arsc.base.Block;
|
||||
import com.reandroid.lib.arsc.container.BlockList;
|
||||
import com.reandroid.lib.arsc.container.FixedBlockContainer;
|
||||
import com.reandroid.lib.arsc.container.SingleBlockContainer;
|
||||
import com.reandroid.lib.arsc.decoder.ValueDecoder;
|
||||
import com.reandroid.lib.arsc.header.HeaderBlock;
|
||||
import com.reandroid.lib.arsc.io.BlockReader;
|
||||
import com.reandroid.lib.arsc.item.ResXmlString;
|
||||
@ -759,7 +760,8 @@ import java.util.*;
|
||||
}
|
||||
ResXmlText resXmlText = getResXmlText();
|
||||
if(resXmlText!=null){
|
||||
xmlElement.setTextContent(resXmlText.getText());
|
||||
xmlElement.setTextContent(
|
||||
ValueDecoder.escapeSpecialCharacter(resXmlText.getText()));
|
||||
}
|
||||
return xmlElement;
|
||||
}
|
||||
|
@ -31,6 +31,34 @@ import java.util.regex.Pattern;
|
||||
|
||||
public class ValueDecoder {
|
||||
|
||||
public static String escapeSpecialCharacter(String text){
|
||||
if(text==null || text.length()==0){
|
||||
return text;
|
||||
}
|
||||
if(isSpecialCharacter(text.charAt(0))){
|
||||
return '\\' +text;
|
||||
}
|
||||
return text;
|
||||
}
|
||||
public static String unEscapeSpecialCharacter(String text){
|
||||
if(text==null || text.length()<2){
|
||||
return text;
|
||||
}
|
||||
if(text.charAt(0)!='\\' || !isSpecialCharacter(text.charAt(1))){
|
||||
return text;
|
||||
}
|
||||
return text.substring(1);
|
||||
}
|
||||
private static boolean isSpecialCharacter(char ch){
|
||||
switch (ch){
|
||||
case '@':
|
||||
case '?':
|
||||
case '#':
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public static EncodeResult encodeGuessAny(String txt){
|
||||
if(txt==null){
|
||||
return null;
|
||||
@ -574,7 +602,7 @@ import java.util.regex.Pattern;
|
||||
if(tableString==null){
|
||||
return null;
|
||||
}
|
||||
return tableString.getHtml();
|
||||
return escapeSpecialCharacter(tableString.getHtml());
|
||||
}
|
||||
private static String decodeString(EntryStore entryStore, int packageOrResourceId, int stringRef){
|
||||
if(entryStore==null||packageOrResourceId==0){
|
||||
@ -606,7 +634,7 @@ import java.util.regex.Pattern;
|
||||
}
|
||||
}
|
||||
if(tableString!=null){
|
||||
return tableString.getHtml();
|
||||
return escapeSpecialCharacter(tableString.getHtml());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@ -623,7 +651,7 @@ import java.util.regex.Pattern;
|
||||
if(tableString==null){
|
||||
return null;
|
||||
}
|
||||
return tableString.getHtml();
|
||||
return escapeSpecialCharacter(tableString.getHtml());
|
||||
}
|
||||
|
||||
private static String decodeHex(int rawVal){
|
||||
|
Loading…
x
Reference in New Issue
Block a user