Skip to content

Commit 55b3963

Browse files
authored
Merge pull request #30 from RUB-NDS/prettyXml2
Pretty xml
2 parents f80a129 + d7b6277 commit 55b3963

36 files changed

+512
-17
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>de.rub.nds</groupId>
55
<artifactId>ModifiableVariable</artifactId>
6-
<version>2.2</version>
6+
<version>2.3</version>
77
<packaging>jar</packaging>
88

99
<name>ModifiableVariable</name>

src/main/java/de/rub/nds/modifiablevariable/VariableModification.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ public E modify(E input) {
107107

108108
protected abstract E modifyImplementationHook(E input);
109109

110+
public abstract VariableModification<E> getModifiedCopy();
111+
110112
/**
111113
* Debugging modified variables. Getting stack trace can be time consuming,
112114
* thus we use isDebugEnabled() function

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerAddModification.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import java.util.Random;
1314
import javax.xml.bind.annotation.XmlRootElement;
1415
import javax.xml.bind.annotation.XmlType;
1516

1617
@XmlRootElement
1718
@XmlType(propOrder = { "summand", "modificationFilter", "postModification" })
1819
public class BigIntegerAddModification extends VariableModification<BigInteger> {
1920

21+
private final static int MAX_ADD_LENGTH = 8;
22+
2023
private BigInteger summand;
2124

2225
public BigIntegerAddModification() {
@@ -39,4 +42,9 @@ public BigInteger getSummand() {
3942
public void setSummand(BigInteger summand) {
4043
this.summand = summand;
4144
}
45+
46+
@Override
47+
public VariableModification<BigInteger> getModifiedCopy() {
48+
return new BigIntegerAddModification(summand.add(new BigInteger(MAX_ADD_LENGTH, new Random())));
49+
}
4250
}

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerExplicitValueModification.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import java.util.Random;
1314
import javax.xml.bind.annotation.XmlRootElement;
1415
import javax.xml.bind.annotation.XmlType;
1516

1617
@XmlRootElement
1718
@XmlType(propOrder = { "explicitValue", "modificationFilter", "postModification" })
1819
public class BigIntegerExplicitValueModification extends VariableModification<BigInteger> {
1920

21+
private final static int MAX_EXPLICIT_LENGTH = 8;
22+
2023
private BigInteger explicitValue;
2124

2225
public BigIntegerExplicitValueModification() {
@@ -38,4 +41,15 @@ public BigInteger getExplicitValue() {
3841
public void setExplicitValue(BigInteger explicitValue) {
3942
this.explicitValue = explicitValue;
4043
}
41-
}
44+
45+
@Override
46+
public VariableModification<BigInteger> getModifiedCopy() {
47+
Random r = new Random();
48+
if (r.nextBoolean()) {
49+
return new BigIntegerExplicitValueModification(explicitValue.add(new BigInteger(MAX_EXPLICIT_LENGTH, r)));
50+
} else {
51+
return new BigIntegerExplicitValueModification(
52+
explicitValue.subtract(new BigInteger(MAX_EXPLICIT_LENGTH, r)));
53+
}
54+
}
55+
}

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerInteractiveModification.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,10 @@ public interface InteractiveBigIntegerModification {
3636

3737
BigInteger modify(BigInteger oldVal);
3838
}
39+
40+
@Override
41+
public VariableModification<BigInteger> getModifiedCopy() {
42+
throw new UnsupportedOperationException("This method is not supported for interactive Modifactions");
43+
}
44+
3945
}

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerShiftLeftModification.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import java.util.Random;
1314
import javax.xml.bind.annotation.XmlRootElement;
1415
import javax.xml.bind.annotation.XmlType;
1516

1617
@XmlRootElement
1718
@XmlType(propOrder = { "shift", "modificationFilter", "postModification" })
1819
public class BigIntegerShiftLeftModification extends VariableModification<BigInteger> {
1920

21+
private final static int MAX_SHIFT_LENGTH = 32;
22+
2023
private int shift;
2124

2225
public BigIntegerShiftLeftModification() {
@@ -42,4 +45,9 @@ public int getShift() {
4245
public void setShift(int shift) {
4346
this.shift = shift;
4447
}
48+
49+
@Override
50+
public VariableModification<BigInteger> getModifiedCopy() {
51+
return new BigIntegerShiftLeftModification(shift + new Random().nextInt(MAX_SHIFT_LENGTH));
52+
}
4553
}

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerShiftRightModification.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import java.util.Random;
1314
import javax.xml.bind.annotation.XmlRootElement;
1415
import javax.xml.bind.annotation.XmlType;
1516

1617
@XmlRootElement
1718
@XmlType(propOrder = { "shift", "modificationFilter", "postModification" })
1819
public class BigIntegerShiftRightModification extends VariableModification<BigInteger> {
1920

21+
private final static int MAX_SHIFT_LENGTH = 32;
22+
2023
private int shift;
2124

2225
public BigIntegerShiftRightModification() {
@@ -42,4 +45,9 @@ public int getShift() {
4245
public void setShift(int shift) {
4346
this.shift = shift;
4447
}
48+
49+
@Override
50+
public VariableModification<BigInteger> getModifiedCopy() {
51+
return new BigIntegerShiftRightModification(shift + new Random().nextInt(MAX_SHIFT_LENGTH));
52+
}
4553
}

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerSubtractModification.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import java.util.Random;
1314
import javax.xml.bind.annotation.XmlRootElement;
1415
import javax.xml.bind.annotation.XmlType;
1516

1617
@XmlRootElement
1718
@XmlType(propOrder = { "subtrahend", "modificationFilter", "postModification" })
1819
public class BigIntegerSubtractModification extends VariableModification<BigInteger> {
1920

21+
private final static int MAX_SUBTRACT_LENGTH = 8;
22+
2023
private BigInteger subtrahend;
2124

2225
public BigIntegerSubtractModification() {
@@ -42,4 +45,9 @@ public BigInteger getSubtrahend() {
4245
public void setSubtrahend(BigInteger subtrahend) {
4346
this.subtrahend = subtrahend;
4447
}
48+
49+
@Override
50+
public VariableModification<BigInteger> getModifiedCopy() {
51+
return new BigIntegerSubtractModification(subtrahend.add(new BigInteger(MAX_SUBTRACT_LENGTH, new Random())));
52+
}
4553
}

src/main/java/de/rub/nds/modifiablevariable/biginteger/BigIntegerXorModification.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010

1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import java.math.BigInteger;
13+
import java.util.Random;
1314
import javax.xml.bind.annotation.XmlRootElement;
1415
import javax.xml.bind.annotation.XmlType;
1516

1617
@XmlRootElement
1718
@XmlType(propOrder = { "xor", "modificationFilter", "postModification" })
1819
public class BigIntegerXorModification extends VariableModification<BigInteger> {
1920

21+
private final static int MAX_XOR_LENGTH = 8;
22+
2023
private BigInteger xor;
2124

2225
public BigIntegerXorModification() {
@@ -42,4 +45,9 @@ public BigInteger getXor() {
4245
public void setXor(BigInteger xor) {
4346
this.xor = xor;
4447
}
48+
49+
@Override
50+
public VariableModification<BigInteger> getModifiedCopy() {
51+
return new BigIntegerXorModification(xor.add(new BigInteger(MAX_XOR_LENGTH, new Random())));
52+
}
4553
}

src/main/java/de/rub/nds/modifiablevariable/bool/BooleanExplicitValueModification.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,9 @@ public boolean isExplicitValue() {
3737
public void setExplicitValue(boolean explicitValue) {
3838
this.explicitValue = explicitValue;
3939
}
40+
41+
@Override
42+
public VariableModification<Boolean> getModifiedCopy() {
43+
return new BooleanExplicitValueModification(!explicitValue);
44+
}
4045
}

src/main/java/de/rub/nds/modifiablevariable/bool/BooleanToogleModification.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,9 @@ protected Boolean modifyImplementationHook(Boolean input) {
2626
}
2727
return !input;
2828
}
29+
30+
@Override
31+
public VariableModification<Boolean> getModifiedCopy() {
32+
return new BooleanToogleModification();
33+
}
2934
}

src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDeleteModification.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,16 @@
1212
import de.rub.nds.modifiablevariable.util.ArrayConverter;
1313
import static de.rub.nds.modifiablevariable.util.ArrayConverter.bytesToHexString;
1414
import java.util.Arrays;
15+
import java.util.Random;
1516
import javax.xml.bind.annotation.XmlRootElement;
1617
import javax.xml.bind.annotation.XmlType;
1718

1819
@XmlRootElement
1920
@XmlType(propOrder = { "count", "startPosition", "modificationFilter", "postModification" })
2021
public class ByteArrayDeleteModification extends VariableModification<byte[]> {
2122

23+
private final static int MAX_MODIFIER_LENGTH = 32;
24+
2225
private int count;
2326

2427
private int startPosition;
@@ -78,4 +81,26 @@ public int getCount() {
7881
public void setCount(int count) {
7982
this.count = count;
8083
}
84+
85+
@Override
86+
public VariableModification<byte[]> getModifiedCopy() {
87+
Random r = new Random();
88+
int modifier = r.nextInt(MAX_MODIFIER_LENGTH);
89+
if (r.nextBoolean()) {
90+
modifier *= -1;
91+
}
92+
if (r.nextBoolean()) {
93+
modifier = startPosition + modifier;
94+
if (modifier <= 0) {
95+
modifier = 0;
96+
}
97+
return new ByteArrayDeleteModification(modifier, count);
98+
} else {
99+
modifier = startPosition + count;
100+
if (modifier <= 0) {
101+
modifier = 1;
102+
}
103+
return new ByteArrayDeleteModification(startPosition, modifier);
104+
}
105+
}
81106
}

src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayDuplicateModification.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,10 @@ protected byte[] modifyImplementationHook(byte[] input) {
2828
}
2929
return ArrayConverter.concatenate(input, input);
3030
}
31+
32+
@Override
33+
public VariableModification<byte[]> getModifiedCopy() {
34+
return new ByteArrayDuplicateModification();
35+
}
36+
3137
}

src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayExplicitValueModification.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import de.rub.nds.modifiablevariable.VariableModification;
1212
import de.rub.nds.modifiablevariable.util.ArrayConverter;
1313
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
14+
import java.util.Arrays;
15+
import java.util.Random;
1416
import javax.xml.bind.annotation.XmlRootElement;
1517
import javax.xml.bind.annotation.XmlType;
1618
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@ -19,6 +21,8 @@
1921
@XmlType(propOrder = { "explicitValue", "modificationFilter", "postModification" })
2022
public class ByteArrayExplicitValueModification extends VariableModification<byte[]> {
2123

24+
private final static int MAX_EXPLICIT_VALUE = 256;
25+
2226
private byte[] explicitValue;
2327

2428
public ByteArrayExplicitValueModification() {
@@ -49,4 +53,15 @@ public String toString() {
4953
+ ArrayConverter.bytesToHexString(explicitValue) + '}';
5054
}
5155

56+
@Override
57+
public VariableModification<byte[]> getModifiedCopy() {
58+
Random r = new Random();
59+
if (explicitValue.length == 0) {
60+
return this;
61+
}
62+
int index = r.nextInt(explicitValue.length);
63+
byte[] newValue = Arrays.copyOf(explicitValue, explicitValue.length);
64+
newValue[index] = (byte) r.nextInt(MAX_EXPLICIT_VALUE);
65+
return new ByteArrayExplicitValueModification(newValue);
66+
}
5267
}

src/main/java/de/rub/nds/modifiablevariable/bytearray/ByteArrayInsertModification.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import de.rub.nds.modifiablevariable.util.ArrayConverter;
1313
import de.rub.nds.modifiablevariable.util.ByteArrayAdapter;
1414
import java.util.Arrays;
15+
import java.util.Random;
1516
import javax.xml.bind.annotation.XmlRootElement;
1617
import javax.xml.bind.annotation.XmlType;
1718
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@@ -20,6 +21,10 @@
2021
@XmlType(propOrder = { "bytesToInsert", "startPosition", "modificationFilter", "postModification" })
2122
public class ByteArrayInsertModification extends VariableModification<byte[]> {
2223

24+
private final static int MAX_EXPLICIT_VALUE = 256;
25+
26+
private final static int MAX_INSERT_MODIFIER = 32;
27+
2328
private byte[] bytesToInsert;
2429

2530
private int startPosition;
@@ -76,4 +81,27 @@ public int getStartPosition() {
7681
public void setStartPosition(int startPosition) {
7782
this.startPosition = startPosition;
7883
}
84+
85+
@Override
86+
public VariableModification<byte[]> getModifiedCopy() {
87+
Random r = new Random();
88+
89+
if (r.nextBoolean()) {
90+
int index = r.nextInt(bytesToInsert.length);
91+
byte[] newValue = Arrays.copyOf(bytesToInsert, bytesToInsert.length);
92+
newValue[index] = (byte) r.nextInt(MAX_EXPLICIT_VALUE);
93+
return new ByteArrayInsertModification(newValue, startPosition);
94+
} else {
95+
byte[] newValue = Arrays.copyOf(bytesToInsert, bytesToInsert.length);
96+
int modifier = r.nextInt(MAX_INSERT_MODIFIER);
97+
if (r.nextBoolean()) {
98+
modifier *= -1;
99+
}
100+
modifier = startPosition + modifier;
101+
if (modifier <= 0) {
102+
modifier = 1;
103+
}
104+
return new ByteArrayInsertModification(newValue, modifier);
105+
}
106+
}
79107
}

0 commit comments

Comments
 (0)