Fix: catch unknown flags in all remaining implementations
Added unknown flag validation to session command in: awk, clj, cob, erl, ex, f90, forth, fs, lisp, ml, pro, r, scm, tcl, Java Now all 42+ implementations properly reject unknown flags with 'Unknown option' error instead of making confusing API requests.
This commit is contained in:
parent
35b3ab615a
commit
09ec15aa62
15 changed files with 126 additions and 11 deletions
4
Un.java
4
Un.java
|
|
@ -877,6 +877,10 @@ public class Un {
|
||||||
result.keyExtend = true;
|
result.keyExtend = true;
|
||||||
} else if (!arg.startsWith("-")) {
|
} else if (!arg.startsWith("-")) {
|
||||||
result.sourceFile = arg;
|
result.sourceFile = arg;
|
||||||
|
} else {
|
||||||
|
System.err.println("Unknown option: " + arg);
|
||||||
|
printHelp();
|
||||||
|
System.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
|
|
||||||
5
un.awk
5
un.awk
|
|
@ -670,6 +670,11 @@ END {
|
||||||
input_files = input_files ARGV[i + 1]
|
input_files = input_files ARGV[i + 1]
|
||||||
i += 2
|
i += 2
|
||||||
} else {
|
} else {
|
||||||
|
if (substr(ARGV[i], 1, 1) == "-") {
|
||||||
|
print "Unknown option: " ARGV[i] > "/dev/stderr"
|
||||||
|
usage()
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
8
un.clj
8
un.clj
|
|
@ -526,6 +526,14 @@
|
||||||
(recur (rest args) (first args) env-vars artifacts out-dir network vcpu session-action session-id session-shell session-input-files
|
(recur (rest args) (first args) env-vars artifacts out-dir network vcpu session-action session-id session-shell session-input-files
|
||||||
service-action service-id service-name service-ports service-bootstrap service-bootstrap-file service-type service-input-files key-extend mode)
|
service-action service-id service-name service-ports service-bootstrap service-bootstrap-file service-type service-input-files key-extend mode)
|
||||||
|
|
||||||
|
;; Unknown option check
|
||||||
|
(and (= mode :session) (.startsWith (first args) "-"))
|
||||||
|
(do
|
||||||
|
(println (str red "Unknown option: " (first args) reset) *err*)
|
||||||
|
(println "Usage: un.clj session [options]")
|
||||||
|
(println "Options: --list, --kill ID, --shell SHELL, -s SHELL, -f FILE, -n NETWORK, -v VCPU")
|
||||||
|
(System/exit 1))
|
||||||
|
|
||||||
:else
|
:else
|
||||||
(recur (rest args) file env-vars artifacts out-dir network vcpu session-action session-id session-shell session-input-files
|
(recur (rest args) file env-vars artifacts out-dir network vcpu session-action session-id session-shell session-input-files
|
||||||
service-action service-id service-name service-ports service-bootstrap service-bootstrap-file service-type service-input-files key-extend mode))))
|
service-action service-id service-name service-ports service-bootstrap service-bootstrap-file service-type service-input-files key-extend mode))))
|
||||||
|
|
|
||||||
10
un.cob
10
un.cob
|
|
@ -376,6 +376,16 @@
|
||||||
ELSE
|
ELSE
|
||||||
MOVE WS-ARG3 TO WS-INPUT-FILES
|
MOVE WS-ARG3 TO WS-INPUT-FILES
|
||||||
END-IF
|
END-IF
|
||||||
|
ELSE
|
||||||
|
IF WS-ARG3(1:1) = "-"
|
||||||
|
STRING "Unknown option: " FUNCTION TRIM(WS-ARG3)
|
||||||
|
DELIMITED BY SIZE INTO WS-ERROR-MSG
|
||||||
|
END-STRING
|
||||||
|
DISPLAY WS-ERROR-MSG UPON SYSERR
|
||||||
|
DISPLAY "Usage: un.cob session [options]" UPON SYSERR
|
||||||
|
MOVE 1 TO RETURN-CODE
|
||||||
|
STOP RUN
|
||||||
|
END-IF
|
||||||
END-IF
|
END-IF
|
||||||
ACCEPT WS-ARG3 FROM ARGUMENT-VALUE
|
ACCEPT WS-ARG3 FROM ARGUMENT-VALUE
|
||||||
END-PERFORM.
|
END-PERFORM.
|
||||||
|
|
|
||||||
17
un.erl
17
un.erl
|
|
@ -103,6 +103,7 @@ session_command(["--kill", SessionId | _]) ->
|
||||||
io:format("\033[32mSession terminated: ~s\033[0m~n", [SessionId]);
|
io:format("\033[32mSession terminated: ~s\033[0m~n", [SessionId]);
|
||||||
|
|
||||||
session_command(Args) ->
|
session_command(Args) ->
|
||||||
|
validate_session_args(Args),
|
||||||
ApiKey = get_api_key(),
|
ApiKey = get_api_key(),
|
||||||
Shell = get_shell_opt(Args, "bash"),
|
Shell = get_shell_opt(Args, "bash"),
|
||||||
InputFiles = get_input_files(Args),
|
InputFiles = get_input_files(Args),
|
||||||
|
|
@ -114,6 +115,22 @@ session_command(Args) ->
|
||||||
io:format("\033[33mSession created (WebSocket required)\033[0m~n"),
|
io:format("\033[33mSession created (WebSocket required)\033[0m~n"),
|
||||||
io:format("~s~n", [Response]).
|
io:format("~s~n", [Response]).
|
||||||
|
|
||||||
|
validate_session_args([]) -> ok;
|
||||||
|
validate_session_args(["--shell", _ | Rest]) -> validate_session_args(Rest);
|
||||||
|
validate_session_args(["-s", _ | Rest]) -> validate_session_args(Rest);
|
||||||
|
validate_session_args(["-f", _ | Rest]) -> validate_session_args(Rest);
|
||||||
|
validate_session_args(["-n", _ | Rest]) -> validate_session_args(Rest);
|
||||||
|
validate_session_args(["-v", _ | Rest]) -> validate_session_args(Rest);
|
||||||
|
validate_session_args([Arg | _]) ->
|
||||||
|
case Arg of
|
||||||
|
[$- | _] ->
|
||||||
|
io:format(standard_error, "Unknown option: ~s~n", [Arg]),
|
||||||
|
io:format(standard_error, "Usage: un.erl session [options]~n", []),
|
||||||
|
halt(1);
|
||||||
|
_ ->
|
||||||
|
validate_session_args([])
|
||||||
|
end.
|
||||||
|
|
||||||
%% Service command
|
%% Service command
|
||||||
service_command(["--list" | _]) ->
|
service_command(["--list" | _]) ->
|
||||||
ApiKey = get_api_key(),
|
ApiKey = get_api_key(),
|
||||||
|
|
|
||||||
17
un.ex
17
un.ex
|
|
@ -133,6 +133,7 @@ defmodule Un do
|
||||||
end
|
end
|
||||||
|
|
||||||
defp session_command(args) do
|
defp session_command(args) do
|
||||||
|
validate_session_args(args)
|
||||||
api_key = get_api_key()
|
api_key = get_api_key()
|
||||||
shell = get_opt(args, "--shell", "-s", "bash")
|
shell = get_opt(args, "--shell", "-s", "bash")
|
||||||
network = get_opt(args, "-n", nil, nil)
|
network = get_opt(args, "-n", nil, nil)
|
||||||
|
|
@ -149,6 +150,22 @@ defmodule Un do
|
||||||
IO.puts(response)
|
IO.puts(response)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp validate_session_args([]), do: :ok
|
||||||
|
defp validate_session_args(["--shell", _ | rest]), do: validate_session_args(rest)
|
||||||
|
defp validate_session_args(["-s", _ | rest]), do: validate_session_args(rest)
|
||||||
|
defp validate_session_args(["-f", _ | rest]), do: validate_session_args(rest)
|
||||||
|
defp validate_session_args(["-n", _ | rest]), do: validate_session_args(rest)
|
||||||
|
defp validate_session_args(["-v", _ | rest]), do: validate_session_args(rest)
|
||||||
|
defp validate_session_args([arg | _]) do
|
||||||
|
if String.starts_with?(arg, "-") do
|
||||||
|
IO.puts(:stderr, "Unknown option: #{arg}")
|
||||||
|
IO.puts(:stderr, "Usage: un.ex session [options]")
|
||||||
|
System.halt(1)
|
||||||
|
else
|
||||||
|
validate_session_args([])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Service command
|
# Service command
|
||||||
defp service_command(["--list" | _]) do
|
defp service_command(["--list" | _]) do
|
||||||
api_key = get_api_key()
|
api_key = get_api_key()
|
||||||
|
|
|
||||||
8
un.f90
8
un.f90
|
|
@ -222,6 +222,14 @@ contains
|
||||||
input_files = trim(arg)
|
input_files = trim(arg)
|
||||||
end if
|
end if
|
||||||
end if
|
end if
|
||||||
|
else
|
||||||
|
if (len_trim(arg) > 0) then
|
||||||
|
if (arg(1:1) == '-') then
|
||||||
|
write(0, '(A,A)') 'Unknown option: ', trim(arg)
|
||||||
|
write(0, '(A)') 'Usage: un.f90 session [options]'
|
||||||
|
stop 1
|
||||||
|
end if
|
||||||
|
end if
|
||||||
end if
|
end if
|
||||||
end do
|
end do
|
||||||
|
|
||||||
|
|
|
||||||
12
un.forth
12
un.forth
|
|
@ -627,9 +627,17 @@
|
||||||
0 (bye)
|
0 (bye)
|
||||||
then
|
then
|
||||||
|
|
||||||
|
\ Check if argument starts with '-'
|
||||||
|
2dup drop c@ [char] - = if
|
||||||
|
s" Unknown option: " type type cr
|
||||||
|
s" Usage: un.forth session [options]" type cr
|
||||||
|
2drop
|
||||||
|
1 (bye)
|
||||||
|
then
|
||||||
|
|
||||||
2drop
|
2drop
|
||||||
s" Error: Use --list or --kill ID" type cr
|
session-create
|
||||||
1 (bye)
|
0 (bye)
|
||||||
;
|
;
|
||||||
|
|
||||||
\ Handle service subcommand
|
\ Handle service subcommand
|
||||||
|
|
|
||||||
6
un.fs
6
un.fs
|
|
@ -636,7 +636,11 @@ let parseArgs (argv: string[]) =
|
||||||
| "--dump-file" -> i <- i + 1; args.ServiceDumpFile <- Some argv.[i]
|
| "--dump-file" -> i <- i + 1; args.ServiceDumpFile <- Some argv.[i]
|
||||||
| "--extend" -> args.KeyExtend <- true
|
| "--extend" -> args.KeyExtend <- true
|
||||||
| arg when not (arg.StartsWith("-")) -> args.SourceFile <- Some arg
|
| arg when not (arg.StartsWith("-")) -> args.SourceFile <- Some arg
|
||||||
| _ -> ()
|
| arg ->
|
||||||
|
if arg.StartsWith("-") && args.Command = Some "session" then
|
||||||
|
eprintfn "Unknown option: %s" arg
|
||||||
|
eprintfn "Usage: un.fs session [options]"
|
||||||
|
Environment.Exit(1)
|
||||||
i <- i + 1
|
i <- i + 1
|
||||||
|
|
||||||
args
|
args
|
||||||
|
|
|
||||||
7
un.lisp
7
un.lisp
|
|
@ -434,7 +434,12 @@
|
||||||
do (let ((opt (nth i rest-args))
|
do (let ((opt (nth i rest-args))
|
||||||
(val (nth (1+ i) rest-args)))
|
(val (nth (1+ i) rest-args)))
|
||||||
(cond
|
(cond
|
||||||
((or (string= opt "--shell") (string= opt "-s")) (setf shell val)))))
|
((or (string= opt "--shell") (string= opt "-s")) (setf shell val))
|
||||||
|
((string= opt "-f") nil) ; already parsed
|
||||||
|
((and (> (length opt) 0) (char= (char opt 0) #\-))
|
||||||
|
(format *error-output* "Unknown option: ~a~%" opt)
|
||||||
|
(format *error-output* "Usage: un.lisp session [options]~%")
|
||||||
|
(uiop:quit 1)))))
|
||||||
(session-cmd "create" nil shell input-files)))))
|
(session-cmd "create" nil shell input-files)))))
|
||||||
((string= (first args) "service")
|
((string= (first args) "service")
|
||||||
(cond
|
(cond
|
||||||
|
|
|
||||||
8
un.ml
8
un.ml
|
|
@ -664,7 +664,13 @@ let () =
|
||||||
| "-n" :: net :: rest -> parse_session action shell (Some net) vcpu rest
|
| "-n" :: net :: rest -> parse_session action shell (Some net) vcpu rest
|
||||||
| "-v" :: v :: rest -> parse_session action shell network (Some (int_of_string v)) rest
|
| "-v" :: v :: rest -> parse_session action shell network (Some (int_of_string v)) rest
|
||||||
| "-f" :: _ :: rest -> parse_session action shell network vcpu rest (* skip -f, already parsed *)
|
| "-f" :: _ :: rest -> parse_session action shell network vcpu rest (* skip -f, already parsed *)
|
||||||
| _ :: rest -> parse_session action shell network vcpu rest
|
| arg :: rest ->
|
||||||
|
if String.length arg > 0 && arg.[0] = '-' then begin
|
||||||
|
Printf.fprintf stderr "Unknown option: %s\n" arg;
|
||||||
|
Printf.fprintf stderr "Usage: un.ml session [options]\n";
|
||||||
|
exit 1
|
||||||
|
end else
|
||||||
|
parse_session action shell network vcpu rest
|
||||||
in
|
in
|
||||||
parse_session "create" None None None rest
|
parse_session "create" None None None rest
|
||||||
| "service" :: rest ->
|
| "service" :: rest ->
|
||||||
|
|
|
||||||
9
un.pro
9
un.pro
|
|
@ -321,8 +321,13 @@ parse_session_args(['-f', FilePath|Rest], Shell, Files, ShellOut, InputFiles) :-
|
||||||
; format(user_error, 'Error: File not found: ~w~n', [FilePath]),
|
; format(user_error, 'Error: File not found: ~w~n', [FilePath]),
|
||||||
halt(1)
|
halt(1)
|
||||||
).
|
).
|
||||||
parse_session_args([_|Rest], Shell, Files, ShellOut, InputFiles) :-
|
parse_session_args([Arg|Rest], Shell, Files, ShellOut, InputFiles) :-
|
||||||
parse_session_args(Rest, Shell, Files, ShellOut, InputFiles).
|
( atom_chars(Arg, ['-'|_])
|
||||||
|
-> format(user_error, 'Unknown option: ~w~n', [Arg]),
|
||||||
|
format(user_error, 'Usage: un.pro session [options]~n', []),
|
||||||
|
halt(1)
|
||||||
|
; parse_session_args(Rest, Shell, Files, ShellOut, InputFiles)
|
||||||
|
).
|
||||||
|
|
||||||
% Handle service subcommand
|
% Handle service subcommand
|
||||||
handle_service(Args) :-
|
handle_service(Args) :-
|
||||||
|
|
|
||||||
6
un.r
6
un.r
|
|
@ -702,7 +702,11 @@ parse_args <- function() {
|
||||||
result$source_file <- arg
|
result$source_file <- arg
|
||||||
i <- i + 1
|
i <- i + 1
|
||||||
} else {
|
} else {
|
||||||
cat(sprintf("Unknown argument: %s\n", arg), file = stderr())
|
cat(sprintf("Unknown option: %s\n", arg), file = stderr())
|
||||||
|
cat("Usage: un.r [options] <source_file>\n", file = stderr())
|
||||||
|
cat(" un.r session [options]\n", file = stderr())
|
||||||
|
cat(" un.r service [options]\n", file = stderr())
|
||||||
|
cat(" un.r key [options]\n", file = stderr())
|
||||||
quit(status = 1)
|
quit(status = 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
13
un.scm
13
un.scm
|
|
@ -481,10 +481,17 @@
|
||||||
(shell #f))
|
(shell #f))
|
||||||
;; Parse --shell option
|
;; Parse --shell option
|
||||||
(let loop ((args rest-args))
|
(let loop ((args rest-args))
|
||||||
(when (and (pair? args) (pair? (cdr args)))
|
(when (pair? args)
|
||||||
(cond
|
(cond
|
||||||
((or (equal? (car args) "--shell") (equal? (car args) "-s"))
|
((and (or (equal? (car args) "--shell") (equal? (car args) "-s")) (pair? (cdr args)))
|
||||||
(set! shell (cadr args)))
|
(set! shell (cadr args))
|
||||||
|
(loop (cddr args)))
|
||||||
|
((equal? (car args) "-f")
|
||||||
|
(loop (cdr args))) ; skip -f, already parsed
|
||||||
|
((and (string? (car args)) (> (string-length (car args)) 0) (char=? (string-ref (car args) 0) #\-))
|
||||||
|
(format (current-error-port) "~aUnknown option: ~a~a\n" red (car args) reset)
|
||||||
|
(format (current-error-port) "Usage: un.scm session [options]\n")
|
||||||
|
(exit 1))
|
||||||
(else (loop (cdr args))))))
|
(else (loop (cdr args))))))
|
||||||
(session-cmd "create" #f shell input-files)))))
|
(session-cmd "create" #f shell input-files)))))
|
||||||
((equal? (car args) "service")
|
((equal? (car args) "service")
|
||||||
|
|
|
||||||
7
un.tcl
7
un.tcl
|
|
@ -348,6 +348,13 @@ proc cmd_session {args} {
|
||||||
incr i
|
incr i
|
||||||
lappend input_files [lindex $args $i]
|
lappend input_files [lindex $args $i]
|
||||||
}
|
}
|
||||||
|
default {
|
||||||
|
if {[string index $arg 0] eq "-"} {
|
||||||
|
puts stderr "${::RED}Unknown option: $arg${::RESET}"
|
||||||
|
puts stderr "Usage: un.tcl session \[options\]"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue