fixed memory access out of bound errors

master
Alessandro Mauri 3 years ago
parent fb130ed809
commit 29bc56fc36
  1. 40
      hkd.c

40
hkd.c

@ -64,6 +64,7 @@
#define array_size(val) (val ? sizeof(val)/sizeof(val[0]) : 0)
#define array_size_const(val) ((int)(sizeof(val)/sizeof(val[0])))
#define wrap_err(s) "[%s] " s, __func__
#define is_empty(s) (!(s) || !(s)[0])
#define EVENT_SIZE (sizeof(struct inotify_event))
#define EVENT_BUF_LEN (1024*(EVENT_SIZE+16))
@ -529,7 +530,7 @@ void hotkey_list_add (struct hotkey_list_e *head, union hotkey_main_data *dt, ch
{
int size;
struct hotkey_list_e *tmp;
if (!(size = strlen(cmd)))
if (is_empty(cmd) || !(size = strlen(cmd)))
return;
if (!(tmp = malloc(sizeof(struct hotkey_list_e))))
die(wrap_err("Bad malloc:"));
@ -736,10 +737,8 @@ void parse_config_file (void)
die(wrap_err("Keys is NULL"));
i_tmp = strlen(keys);
for (int i = 0; i < i_tmp; i++) {
if (isblank(keys[i])) {
memmove(&keys[i], &keys[i + 1], --i_tmp);
keys[i_tmp] = '\0';
}
if (isblank(keys[i]))
memmove(&keys[i], &keys[i + 1], i_tmp - i);
}
cp_tmp = strtok(keys, ",");
if(!cp_tmp)
@ -865,34 +864,39 @@ void usage (void)
/* replaces every instance of m(match) with r(eplace) inside of s */
void replace (char **s, const char *m, const char *r)
{
char **new_s = s;
int ms = strlen(m), rs = strlen(r);
char *t1;
if (is_empty(s) || is_empty(*s) || is_empty(m) || is_empty(r))
return;
int count = 0;
int *offs = NULL, o = 0, *t2;
int nss = strlen(*new_s);
while ((t1 = strstr(*new_s + o, m))) {
int ms = strlen(m), rs = strlen(r);
int count = 0, o = 0;
int *offs = NULL, *t2 = NULL;
char *t1 = NULL;
while ((t1 = strstr((*s) + o, m))) {
/* check if the match is surrounded by whitespace */
if ((t1[ms] == '\0' || isblank(t1[ms]))
&& isblank(t1 > *new_s ? *(t1 - 1) : ' ')) {
&& isblank(t1 > *s ? *(t1 - 1) : ' ')) {
if (!(t2 = realloc(offs, sizeof(int) * (count + 1))))
die(wrap_err("Bad realloc:"));
offs = t2;
offs[count] = (t1 - *new_s) + (rs - ms) * count;
offs[count] = (t1 - *s) + (rs - ms) * count;
count++;
}
o = (t1 - *new_s) + 1;
o = (t1 - *s) + 1;
}
if (!offs)
return;
int nss = strlen(*s);
if ((rs - ms) > 0) {
if (!(t1 = realloc(*new_s, nss + (rs - ms) * count)))
if (!(t1 = realloc(*s, nss + 1 + (rs - ms) * count)))
die(wrap_err("Bad realloc:"));
*new_s = t1;
*s = t1;
}
for (int i = 0; i < count; i++) {
char* x = *new_s + offs[i];
char* x = *s + offs[i];
int d = strlen(x) - ms;
memmove(x + rs, x + ms, d);
memcpy(x, r, rs);

Loading…
Cancel
Save