diff --git a/pom.xml b/pom.xml
index 39ff36e4..abde6c0a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,9 +58,10 @@
maven-surefire-plugin
2.20
+ 2
false
- false
+ false
diff --git a/src/main/java/ysoserial/GeneratePayload.java b/src/main/java/ysoserial/GeneratePayload.java
index 88776f34..6c0b5aa8 100644
--- a/src/main/java/ysoserial/GeneratePayload.java
+++ b/src/main/java/ysoserial/GeneratePayload.java
@@ -3,6 +3,7 @@
import java.io.PrintStream;
import java.util.*;
+import ysoserial.payloads.ExtendedObjectPayload;
import ysoserial.payloads.ObjectPayload;
import ysoserial.payloads.ObjectPayload.Utils;
import ysoserial.payloads.annotation.Authors;
@@ -14,12 +15,12 @@ public class GeneratePayload {
private static final int USAGE_CODE = 64;
public static void main(final String[] args) {
- if (args.length != 2) {
+ if (args.length < 2) {
printUsage();
System.exit(USAGE_CODE);
}
final String payloadType = args[0];
- final String command = args[1];
+ final String[] command = Arrays.copyOfRange(args, 1, args.length);
final Class extends ObjectPayload> payloadClass = Utils.getPayloadClass(payloadType);
if (payloadClass == null) {
@@ -31,7 +32,18 @@ public static void main(final String[] args) {
try {
final ObjectPayload payload = payloadClass.newInstance();
- final Object object = payload.getObject(command);
+ final Object object;
+ if (payload instanceof ExtendedObjectPayload) {
+ ExtendedObjectPayload extended_payload = (ExtendedObjectPayload) payload;
+ object = extended_payload.getObject(command);
+ }
+ else {
+ if (command.length > 1) {
+ System.err.println("The payload '" + payloadType + "' does not support arguments");
+ }
+ object = payload.getObject(command[0]);
+ }
+
PrintStream out = System.out;
Serializer.serialize(object, out);
ObjectPayload.Utils.releasePayload(payload, object);
@@ -45,7 +57,7 @@ public static void main(final String[] args) {
private static void printUsage() {
System.err.println("Y SO SERIAL?");
- System.err.println("Usage: java -jar ysoserial-[version]-all.jar [payload] '[command]'");
+ System.err.println("Usage: java -jar ysoserial-[version]-all.jar payload [arguments ...]");
System.err.println(" Available payload types:");
final List> payloadClasses =
diff --git a/src/main/java/ysoserial/Strings.java b/src/main/java/ysoserial/Strings.java
index 84c21971..11775e7c 100644
--- a/src/main/java/ysoserial/Strings.java
+++ b/src/main/java/ysoserial/Strings.java
@@ -1,7 +1,5 @@
package ysoserial;
-import org.apache.commons.lang.StringUtils;
-
import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;
@@ -21,6 +19,10 @@ public static String join(Iterable strings, String sep, String prefix, S
return sb.toString();
}
+ public static String join(Iterable strings, String sep) {
+ return Strings.join(strings, sep, null, null);
+ }
+
public static String repeat(String str, int num) {
final String[] strs = new String[num];
Arrays.fill(strs, str);
@@ -48,6 +50,19 @@ public static List formatTable(List rows) {
}
return lines;
}
+
+ public static String escapeJavaString(String str) {
+ return str.replaceAll("\\\\","\\\\\\\\").replaceAll("\"", "\\\"");
+ }
+
+ public static String[] escapeJavaStrings(String[] strs) {
+ String[] res = new String[strs.length];
+ for (int i = 0; i < res.length; i++) {
+ res[i] = escapeJavaString(strs[i]);
+ }
+ return res;
+ }
+
public static class ToStringComparator implements Comparator