Fix segfault in xrick 010808 when the -keys option is given key codes longer than 15 characters. -- AYM 2002-01-10 diff -ur xrick-010808/src/sysarg.c xrick-010808-keys/src/sysarg.c --- xrick-010808/src/sysarg.c Sun Jul 29 16:23:16 2001 +++ xrick-010808-keys/src/sysarg.c Thu Jan 10 14:58:04 2002 @@ -7,6 +7,7 @@ * disclaimers, etc. */ +#include /* size_t */ #include /* atoi */ #include /* strcasecmp */ @@ -73,40 +74,45 @@ sysarg_scankeys(char *keys) { char k[16]; - int i, j; + size_t i, j; i = 0; j = 0; - while (keys[i] != '\0' && keys[i] != '-') k[j++] = keys[i++]; + while (keys[i] != '\0' && keys[i] != '-' && j + 1 < sizeof k) + k[j++] = keys[i++]; if (keys[i++] == '\0') return -1; k[j] = '\0'; syskbd_left = sysarg_sdlcode(k); if (!syskbd_left) return -1; j = 0; - while (keys[i] != '\0' && keys[i] != '-') k[j++] = keys[i++]; + while (keys[i] != '\0' && keys[i] != '-' && j + 1 < sizeof k) + k[j++] = keys[i++]; if (keys[i++] == '\0') return -1; k[j] = '\0'; syskbd_right = sysarg_sdlcode(k); if (!syskbd_right) return -1; j = 0; - while (keys[i] != '\0' && keys[i] != '-') k[j++] = keys[i++]; + while (keys[i] != '\0' && keys[i] != '-' && j + 1 < sizeof k) + k[j++] = keys[i++]; if (keys[i++] == '\0') return -1; k[j] = '\0'; syskbd_up = sysarg_sdlcode(k); if (!syskbd_up) return -1; j = 0; - while (keys[i] != '\0' && keys[i] != '-') k[j++] = keys[i++]; + while (keys[i] != '\0' && keys[i] != '-' && j + 1 < sizeof k) + k[j++] = keys[i++]; if (keys[i++] == '\0') return -1; k[j] = '\0'; syskbd_down = sysarg_sdlcode(k); if (!syskbd_down) return -1; j = 0; - while (keys[i] != '\0' && keys[i] != '-') k[j++] = keys[i++]; + while (keys[i] != '\0' && keys[i] != '-' && j + 1 < sizeof k) + k[j++] = keys[i++]; if (keys[i] != '\0') return -1; k[j] = '\0'; syskbd_fire = sysarg_sdlcode(k);