@@ -113,6 +113,8 @@ bool verify_password() {
113
113
114
114
void notify_key (enum wl_keyboard_key_state state , xkb_keysym_t sym , uint32_t code , uint32_t codepoint ) {
115
115
int redraw_screen = 0 ;
116
+ char * password_realloc ;
117
+
116
118
if (state == WL_KEYBOARD_KEY_STATE_PRESSED ) {
117
119
switch (sym ) {
118
120
case XKB_KEY_Return :
@@ -129,6 +131,7 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
129
131
redraw_screen = 1 ;
130
132
131
133
password_size = 1024 ;
134
+ free (password );
132
135
password = malloc (password_size );
133
136
password [0 ] = '\0' ;
134
137
break ;
@@ -149,7 +152,17 @@ void notify_key(enum wl_keyboard_key_state state, xkb_keysym_t sym, uint32_t cod
149
152
int i = strlen (password );
150
153
if (i + 1 == password_size ) {
151
154
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
+ }
153
166
}
154
167
password [i ] = (char )codepoint ;
155
168
password [i + 1 ] = '\0' ;
@@ -305,7 +318,7 @@ int main(int argc, char **argv) {
305
318
break ;
306
319
}
307
320
switch (c ) {
308
- case 'c' :
321
+ case 'c' :
309
322
{
310
323
int colorlen = strlen (optarg );
311
324
if (colorlen < 6 || colorlen == 7 || colorlen > 8 ) {
0 commit comments