X-Git-Url: https://git.danieliu.xyz/?p=slock.git;a=blobdiff_plain;f=slock.c;h=a00fbb9a8f37bbca4d40b04ed40cba525d183781;hp=c9cdee20581b9b9731c35ef8b9fadcfc34ff3eb0;hb=a7afade1701a809f6a33b53525d59dd29b38d381;hpb=65b8d5278882310eed758e6fbfd6ab9676db883c diff --git a/slock.c b/slock.c index c9cdee2..a00fbb9 100644 --- a/slock.c +++ b/slock.c @@ -23,6 +23,8 @@ #include #endif +#include "util.h" + enum { INIT, INPUT, @@ -135,7 +137,7 @@ readpw(Display *dpy, const char *pws) * timeout. */ while (running && !XNextEvent(dpy, &ev)) { if (ev.type == KeyPress) { - buf[0] = 0; + explicit_bzero(&buf, sizeof(buf)); num = XLookupString(&ev.xkey, buf, sizeof(buf), &ksym, 0); if (IsKeypadKey(ksym)) { if (ksym == XK_KP_Enter) @@ -161,14 +163,16 @@ readpw(Display *dpy, const char *pws) XBell(dpy, 100); failure = True; } + explicit_bzero(&passwd, sizeof(passwd)); len = 0; break; case XK_Escape: + explicit_bzero(&passwd, sizeof(passwd)); len = 0; break; case XK_BackSpace: if (len) - --len; + passwd[len--] = 0; break; default: if (num && !iscntrl((int)buf[0]) && (len + num < sizeof(passwd))) {