]> git.sur5r.net Git - i3/i3lock/commitdiff
Skip leading # signs for the color, fix input validation
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 2 Aug 2009 17:50:30 +0000 (19:50 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 2 Aug 2009 17:50:30 +0000 (19:50 +0200)
i3lock.c

index eca32e90488ccf61c105ab9907b05be853973296..64d230195878ae9b064fb28b8911b7d94504f5a5 100644 (file)
--- a/i3lock.c
+++ b/i3lock.c
@@ -45,7 +45,6 @@ static void die(const char *errstr, ...) {
         exit(EXIT_FAILURE);
 }
 
-
 /*
  * Returns the colorpixel to use for the given hex color (think of HTML).
  *
@@ -197,13 +196,17 @@ int main(int argc, char *argv[]) {
                                 xpm_image = true;
                                 break;
                         case 'c':
-                                strncpy(color, optarg, 6);
-                                color[6] = 0;
+                        {
+                                char *arg = optarg;
+                                /* Skip # if present */
+                                if (arg[0] == '#')
+                                        arg++;
+
+                                if (strlen(arg) != 6 || sscanf(arg, "%06[0-9a-fA-F]", color) != 1)
+                                        die("color is invalid, color must be given in 6-byte format: rrggbb\n");
 
-                                char parsed_color[7];
-                                if (strlen(color) != 6 || sscanf(color, "%06[0-9a-fA-F]", parsed_color) != 1)
-                                    die("color is invalid, color must be given in 6-byte format: rrggbb\n");
                                 break;
+                        }
                         default:
                                 die("i3lock: Unknown option. Syntax: i3lock [-v] [-n] [-b] [-d] [-i image.xpm] [-c color]\n");
                 }