33import java .io .PrintStream ;
44import java .util .*;
55
6+ import org .apache .commons .cli .ParseException ;
67import ysoserial .payloads .ObjectPayload ;
78import ysoserial .payloads .ObjectPayload .Utils ;
9+ import ysoserial .payloads .ParameterizedObjectPayload ;
810import ysoserial .payloads .annotation .Authors ;
911import ysoserial .payloads .annotation .Dependencies ;
1012
@@ -14,12 +16,12 @@ public class GeneratePayload {
1416 private static final int USAGE_CODE = 64 ;
1517
1618 public static void main (final String [] args ) {
17- if (args .length != 2 ) {
19+ if (args .length == 0 ) {
1820 printUsage ();
1921 System .exit (USAGE_CODE );
2022 }
2123 final String payloadType = args [0 ];
22- final String command = args [ 1 ] ;
24+ final String [] payloadArgs = Arrays . copyOfRange ( args , 1 , args . length ) ;
2325
2426 final Class <? extends ObjectPayload > payloadClass = Utils .getPayloadClass (payloadType );
2527 if (payloadClass == null ) {
@@ -31,7 +33,42 @@ public static void main(final String[] args) {
3133
3234 try {
3335 final ObjectPayload payload = payloadClass .newInstance ();
34- final Object object = payload .getObject (command );
36+ if (payloadArgs .length == 0 ) {
37+ if (payload instanceof ParameterizedObjectPayload ) {
38+ System .err .println (((ParameterizedObjectPayload ) payload ).getHelp ());
39+ } else {
40+ System .err .println ("Usage: java -jar ysoserial-[version]-all.jar " + payloadType +" '[command]'" );
41+ }
42+ System .exit (USAGE_CODE );
43+ return ;
44+ }
45+ final Object object ;
46+ if (payload instanceof ParameterizedObjectPayload ) {
47+ ParameterizedObjectPayload parameterizedPayload = (ParameterizedObjectPayload )payload ;
48+ try {
49+ object = parameterizedPayload .getObject (payloadArgs );
50+ } catch (ParseException e ) {
51+ System .err .println ("Error: " + e .getMessage ());
52+ System .err .println (parameterizedPayload .getHelp ());
53+ System .exit (USAGE_CODE );
54+ return ;
55+ } catch (IllegalArgumentException e ) {
56+ if (e .getMessage () != null ) {
57+ System .err .println ("Error: " + e .getMessage ());
58+ }
59+ System .err .println (parameterizedPayload .getHelp ());
60+ System .exit (USAGE_CODE );
61+ return ;
62+ }
63+ } else {
64+ if (payloadArgs .length > 1 ) {
65+ System .err .println ("Error: the payload '" + payloadType + "' does not support multiple arguments" );
66+ printUsage ();
67+ System .exit (USAGE_CODE );
68+ return ;
69+ }
70+ object = payload .getObject (payloadArgs [0 ]);
71+ }
3572 PrintStream out = System .out ;
3673 Serializer .serialize (object , out );
3774 ObjectPayload .Utils .releasePayload (payload , object );
@@ -45,7 +82,7 @@ public static void main(final String[] args) {
4582
4683 private static void printUsage () {
4784 System .err .println ("Y SO SERIAL?" );
48- System .err .println ("Usage: java -jar ysoserial-[version]-all.jar [payload] '[command]' " );
85+ System .err .println ("Usage: java -jar ysoserial-[version]-all.jar [payload] [arguments ...] " );
4986 System .err .println (" Available payload types:" );
5087
5188 final List <Class <? extends ObjectPayload >> payloadClasses =
0 commit comments