Skip to content

Commit 9ef39b5

Browse files
committed
Implement SOCK and SCKE
1 parent cbd17b0 commit 9ef39b5

File tree

7 files changed

+541
-10
lines changed

7 files changed

+541
-10
lines changed

README.MD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ Additionally, the following fingerprints are currently supported (more to come):
8181
- [PERL](./docs/catseye/library/PERL.markdown) (Disabled by default, needs command line flag)
8282
- [REFC](./docs/catseye/library/REFC.markdown)
8383
- [ROMA](./docs/catseye/library/ROMA.markdown)
84+
- [SOCK](https://rcfunge98.com/rcsfingers.html#SOCK)
85+
- [SCKE](https://www.rcfunge98.com/rcfunge2_manual.html#SCKE)
8486
- [STRN](https://rcfunge98.com/rcsfingers.html#STRN)
8587
- [TOYS](./docs/catseye/library/TOYS.markdown)
8688
- [TURT](./docs/catseye/library/TURT.markdown) (Broken, disabled in source code, will be fixed in the future)

src/main/java/com/falsepattern/jfunge/Main.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public static void main(String[] args) throws IOException, ParseException {
6969
.longOpt("perl")
7070
.desc("Enable the PERL fingerprint. This requires the working directory of the interpreter to be writable, and is also an arbitrary code execution risk.")
7171
.build());
72+
options.addOption(Option.builder()
73+
.longOpt("sock")
74+
.desc("Enable the SOCK and SCKE fingerprints. This allows the program to open a socket and listen for connections, as well as connect to external hosts. This is a very dangerous permission to grant, it can potentially allow remote code execution.")
75+
.build());
7276
val parser = new DefaultParser();
7377
val cmd = parser.parse(options, args);
7478
if (cmd.hasOption("help")) {

src/main/java/com/falsepattern/jfunge/interpreter/FeatureSet.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,7 @@ public class FeatureSet {
1414
public final boolean environment;
1515
public final long maxIter;
1616

17+
//Dangerous fingerpritns
1718
public final boolean perl;
19+
public final boolean socket;
1820
}

src/main/java/com/falsepattern/jfunge/interpreter/Interpreter.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.falsepattern.jfunge.interpreter.instructions.Instruction;
55
import com.falsepattern.jfunge.interpreter.instructions.InstructionManager;
66
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.PERL;
7+
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.SOCK;
78
import com.falsepattern.jfunge.ip.IP;
89
import com.falsepattern.jfunge.ip.impl.InstructionPointer;
910
import com.falsepattern.jfunge.storage.FungeSpace;
@@ -203,6 +204,11 @@ public Interpreter(String[] args, InputStream input, OutputStream output, FileIO
203204
if (!featureSet.perl) {
204205
fingerprintBlackList.add(PERL.INSTANCE.code());
205206
}
207+
208+
if (!featureSet.socket) {
209+
fingerprintBlackList.add(SOCK.INSTANCE.code());
210+
fingerprintBlackList.add(SOCK.SCKE.INSTANCE.code());
211+
}
206212
}
207213

208214
@SneakyThrows

src/main/java/com/falsepattern/jfunge/interpreter/instructions/Funge98.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.PERL;
2323
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.REFC;
2424
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.ROMA;
25+
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.SOCK;
2526
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.STRN;
2627
import com.falsepattern.jfunge.interpreter.instructions.fingerprints.TOYS;
2728
import com.falsepattern.jfunge.interpreter.instructions.fingerprints._3DSP;
@@ -72,6 +73,8 @@ public class Funge98 implements InstructionSet {
7273
addFingerprint(PERL.INSTANCE);
7374
addFingerprint(REFC.INSTANCE);
7475
addFingerprint(ROMA.INSTANCE);
76+
addFingerprint(SOCK.INSTANCE);
77+
addFingerprint(SOCK.SCKE.INSTANCE);
7578
addFingerprint(STRN.INSTANCE);
7679
addFingerprint(TOYS.INSTANCE);
7780
//TODO Fix TURT, it's broken

0 commit comments

Comments
 (0)