[package] nvram: fix crash when get, set or unset is invoked without argument (#7263)
[openwrt/svn-archive/archive.git] / package / nvram / src / cli.c
index 953910cd68614341762aaaf155c70ed8de3dd1b1..44d4b88fdee69d68447d59bc85b573ff1c6f4636 100644 (file)
@@ -165,20 +165,32 @@ int main( int argc, const char *argv[] )
                                stat = do_info(nvram);
                                done++;
                        }
-                       else if( !strcmp(argv[i], "get") && ++i < argc )
+                       else if( !strcmp(argv[i], "get") || !strcmp(argv[i], "unset") || !strcmp(argv[i], "set") )
                        {
-                               stat = do_get(nvram, argv[i]);
-                               done++;
-                       }
-                       else if( !strcmp(argv[i], "unset") && ++i < argc )
-                       {
-                               stat = do_unset(nvram, argv[i]);
-                               done++;
-                       }
-                       else if( !strcmp(argv[i], "set") && ++i < argc )
-                       {
-                               stat = do_set(nvram, argv[i]);
-                               done++;
+                               if( (i+1) < argc )
+                               {
+                                       switch(argv[i++][0])
+                                       {
+                                               case 'g':
+                                                       stat = do_get(nvram, argv[i]);
+                                                       break;
+
+                                               case 'u':
+                                                       stat = do_unset(nvram, argv[i]);
+                                                       break;
+
+                                               case 's':
+                                                       stat = do_set(nvram, argv[i]);
+                                                       break;
+                                       }
+                                       done++;
+                               }
+                               else
+                               {
+                                       fprintf(stderr, "Command '%s' requires an argument!\n", argv[i]);
+                                       done = 0;
+                                       break;
+                               }
                        }
                        else if( !strcmp(argv[i], "commit") )
                        {