From f356997269257e9cba06f10b92a14e6c2d7be000 Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Fri, 10 Aug 2007 06:13:13 +0000 Subject: Fix crash on invalid command line arguments: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=435651 --- htop.c | 34 ++++++++++++++++++++-------------- htop.h | 2 +- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/htop.c b/htop.c index 96e01060..5b2a996f 100644 --- a/htop.c +++ b/htop.c @@ -208,32 +208,38 @@ int main(int argc, char** argv) { uid_t userId = 0; int sortKey = 0; - if (argc > 0) { - if (String_eq(argv[1], "--help")) { + int arg = 1; + while (arg < argc) { + if (String_eq(argv[arg], "--help")) { printHelpFlag(); - } else if (String_eq(argv[1], "--version")) { + } else if (String_eq(argv[arg], "--version")) { printVersionFlag(); - } else if (String_eq(argv[1], "--sort-key")) { - if (argc < 2) printHelpFlag(); - if (String_eq(argv[2], "help")) { + } else if (String_eq(argv[arg], "--sort-key")) { + if (arg == argc - 1) printHelpFlag(); + arg++; + char* field = argv[arg]; + if (String_eq(field, "help")) { for (int j = 1; j < LAST_PROCESSFIELD; j++) printf ("%s\n", Process_fieldNames[j]); exit(0); } - sortKey = ColumnsPanel_fieldNameToIndex(argv[2]); + sortKey = ColumnsPanel_fieldNameToIndex(field); if (sortKey == -1) { - fprintf(stderr, "Error: invalid column \"%s\".\n", argv[2]); + fprintf(stderr, "Error: invalid column \"%s\".\n", field); exit(1); } - } else if (String_eq(argv[1], "-d")) { - if (argc < 2) printHelpFlag(); - sscanf(argv[2], "%d", &delay); + } else if (String_eq(argv[arg], "-d")) { + if (arg == argc - 1) printHelpFlag(); + arg++; + sscanf(argv[arg], "%d", &delay); if (delay < 1) delay = 1; if (delay > 100) delay = 100; - } else if (String_eq(argv[1], "-u")) { - if (argc < 2) printHelpFlag(); - setUserOnly(argv[2], &userOnly, &userId); + } else if (String_eq(argv[arg], "-u")) { + if (arg == argc - 1) printHelpFlag(); + arg++; + setUserOnly(argv[arg], &userOnly, &userId); } + arg++; } if (access(PROCDIR, R_OK) != 0) { diff --git a/htop.h b/htop.h index 5042f94e..5e7c385e 100644 --- a/htop.h +++ b/htop.h @@ -41,7 +41,7 @@ void printVersionFlag(); void printHelpFlag(); -void showHelp(); +void showHelp(ProcessList* pl); void addUserToList(int key, void* userCast, void* panelCast); -- cgit v1.2.3