From 552610d60de2e926f0d347885e78597db7b67bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Wed, 8 Mar 2017 22:34:01 +0000 Subject: [PATCH] [CLT-2017]: The very last sync! [SHUTDOWN]: shutdown -t causes crash. Patch by Michael Fritscher. (r74131 by Eric). <@dreimer> OMG!!!! <@hbelusca> hm dreimer? <@dreimer> ITS SO IMPORTANT!!!! <@hbelusca> ah you want it? <@hbelusca> ok <@hbelusca> let's add it :D <@dreimer> jkjkjk svn path=/branches/ReactOS-0.4.4-CLT2017/; revision=74133 --- reactos/base/applications/shutdown/shutdown.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/reactos/base/applications/shutdown/shutdown.c b/reactos/base/applications/shutdown/shutdown.c index 986efcf20ec..3e492b9d902 100644 --- a/reactos/base/applications/shutdown/shutdown.c +++ b/reactos/base/applications/shutdown/shutdown.c @@ -56,12 +56,11 @@ ParseArguments(struct CommandLineOptions* pOpts, int argc, WCHAR *argv[]) break; case L'c': /* Comment on reason for shutdown */ + if (index+1 > argc) + return ERROR_INVALID_DATA; if(CheckCommentLength(argv[index+1])) { - if (index+1 <= argc) - pOpts->message = argv[index+1]; - else - return ERROR_INVALID_DATA; + pOpts->message = argv[index+1]; index++; } else @@ -72,10 +71,9 @@ ParseArguments(struct CommandLineOptions* pOpts, int argc, WCHAR *argv[]) break; case L'd': /* Reason code [p|u:]xx:yy */ - if (index+1 <= argc) - pOpts->reason = ParseReasonCode(argv[index+1]); - else + if (index+1 >= argc) return ERROR_INVALID_DATA; + pOpts->reason = ParseReasonCode(argv[index+1]); index++; break; @@ -101,7 +99,10 @@ ParseArguments(struct CommandLineOptions* pOpts, int argc, WCHAR *argv[]) break; case L'm': /* Target remote systems (UNC name/IP address) */ + if (index+1 >= argc) + return ERROR_INVALID_DATA; pOpts->remote_system = argv[index+1]; + index++; break; case L'p': /* Turn off local computer with no warning/time-out */ @@ -118,9 +119,12 @@ ParseArguments(struct CommandLineOptions* pOpts, int argc, WCHAR *argv[]) break; case L't': /* Shutdown delay */ + if (index+1 >= argc) + return ERROR_INVALID_DATA; pOpts->shutdown_delay = _wtoi(argv[index+1]); if (pOpts->shutdown_delay > 0) pOpts->force = TRUE; + index++; break; default: