swaylock: Handle possible fail on password realloc

This commit is contained in:
Mikkel Oscar Lyderik 2016-04-09 23:58:46 +02:00
parent d86b3496bf
commit a50ca76abe

17
main.c
View File

@ -113,6 +113,8 @@ bool verify_password() {
void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) { void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) {
int redraw_screen = 0; int redraw_screen = 0;
char *password_realloc;
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) { if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
switch (sym) { switch (sym) {
case XKB_KEY_Return: case XKB_KEY_Return:
@ -129,6 +131,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
redraw_screen = 1; redraw_screen = 1;
password_size = 1024; password_size = 1024;
free(password);
password = malloc(password_size); password = malloc(password_size);
password[0] = '\0'; password[0] = '\0';
break; break;
@ -149,7 +152,17 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
int i = strlen(password); int i = strlen(password);
if (i + 1 == password_size) { if (i + 1 == password_size) {
password_size += 1024; password_size += 1024;
password = realloc(password, password_size); password_realloc = realloc(password, password_size);
// reset password if realloc fails.
if (password_realloc == NULL) {
password_size = 1024;
free(password);
password = malloc(password_size);
password[0] = '\0';
break;
} else {
password = password_realloc;
}
} }
password[i] = (char)codepoint; password[i] = (char)codepoint;
password[i + 1] = '\0'; password[i + 1] = '\0';
@ -305,7 +318,7 @@ int main(int argc, char **argv) {
break; break;
} }
switch (c) { switch (c) {
case 'c': case 'c':
{ {
int colorlen = strlen(optarg); int colorlen = strlen(optarg);
if (colorlen < 6 || colorlen == 7 || colorlen > 8) { if (colorlen < 6 || colorlen == 7 || colorlen > 8) {