Skip to content

Commit 3b5a8cb

Browse files
committed
Merge pull request #580 from mikkeloscar/handle-realloc-fail
swaylock: Handle possible fail on password realloc
2 parents a71ca65 + f8bb487 commit 3b5a8cb

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

swaylock/main.c

+15-2
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,8 @@ bool verify_password() {
113113

114114
void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t code, uint32_t codepoint) {
115115
int redraw_screen = 0;
116+
char *password_realloc;
117+
116118
if (state == WL_KEYBOARD_KEY_STATE_PRESSED) {
117119
switch (sym) {
118120
case XKB_KEY_Return:
@@ -129,6 +131,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
129131
redraw_screen = 1;
130132

131133
password_size = 1024;
134+
free(password);
132135
password = malloc(password_size);
133136
password[0] = '\0';
134137
break;
@@ -149,7 +152,17 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
149152
int i = strlen(password);
150153
if (i + 1 == password_size) {
151154
password_size += 1024;
152-
password = realloc(password, password_size);
155+
password_realloc = realloc(password, password_size);
156+
// reset password if realloc fails.
157+
if (password_realloc == NULL) {
158+
password_size = 1024;
159+
free(password);
160+
password = malloc(password_size);
161+
password[0] = '\0';
162+
break;
163+
} else {
164+
password = password_realloc;
165+
}
153166
}
154167
password[i] = (char)codepoint;
155168
password[i + 1] = '\0';
@@ -305,7 +318,7 @@ int main(int argc, char **argv) {
305318
break;
306319
}
307320
switch (c) {
308-
case 'c':
321+
case 'c':
309322
{
310323
int colorlen = strlen(optarg);
311324
if (colorlen < 6 || colorlen == 7 || colorlen > 8) {

0 commit comments

Comments
 (0)