Replaced strncat/strncpy with strlcat/strlcpy
The strncat/strncpy functions have dangerously counter-intuitive semantics. They are meant to be used with fixed-width, non-null-terminated strings, which is in, 99% cases, not what you want. The strlcat/strlcpy ones are non-standard, however SDL provides its own implementations on platforms that do not have them.
This commit is contained in:
parent
7e531092db
commit
8668021710
11 changed files with 41 additions and 40 deletions
|
@ -32,7 +32,7 @@ void dadd_msg(Dialog *d, Side side, char *msg) {
|
|||
d->messages = realloc(d->messages, (++d->count)*sizeof(DialogMessage));
|
||||
d->messages[d->count-1].side = side;
|
||||
d->messages[d->count-1].msg = malloc(strlen(msg) + 1);
|
||||
strncpy(d->messages[d->count-1].msg, msg, strlen(msg) + 1);
|
||||
strlcpy(d->messages[d->count-1].msg, msg, strlen(msg) + 1);
|
||||
}
|
||||
|
||||
void delete_dialog(Dialog *d) {
|
||||
|
|
|
@ -166,4 +166,10 @@ enum {
|
|||
EV_CHECK_DESYNC, // replay-only
|
||||
};
|
||||
|
||||
#define strlcat SDL_strlcat
|
||||
#define strlcpy SDL_strlcpy
|
||||
|
||||
#define strncat DO_NOT_USE_strncat_USE_strlcat
|
||||
#define strncpy DO_NOT_USE_strncpy_USE_strlcpy
|
||||
|
||||
#endif
|
||||
|
|
|
@ -53,7 +53,7 @@ void draw_char_menu(MenuData *menu) {
|
|||
char buf[128];
|
||||
int i;
|
||||
for(i = 0; i < menu->ecount; i++) {
|
||||
strncpy(buf, menu->entries[i].name, sizeof(buf));
|
||||
strlcpy(buf, menu->entries[i].name, sizeof(buf));
|
||||
|
||||
char *tex = strtok(buf,"|");
|
||||
char *name = strtok(NULL, "|");
|
||||
|
@ -84,7 +84,7 @@ void draw_char_menu(MenuData *menu) {
|
|||
glColor4f(1,1,1,1-menu->entries[i].drawdata*3);
|
||||
draw_text(AL_Center, 0, 70, title, _fonts.standard);
|
||||
|
||||
strncpy(buf, mod->entries[i].name, sizeof(buf));
|
||||
strlcpy(buf, mod->entries[i].name, sizeof(buf));
|
||||
|
||||
char *mari = strtok(buf, "|");
|
||||
char *youmu = strtok(NULL, "|");
|
||||
|
|
|
@ -15,9 +15,6 @@
|
|||
#include "paths/native.h"
|
||||
#include "taisei_err.h"
|
||||
|
||||
#define strlcat SDL_strlcat
|
||||
#define strlcpy SDL_strlcpy
|
||||
|
||||
// --- Menu entry <-> config option binding stuff --- //
|
||||
|
||||
void bind_init(OptionBinding *bind) {
|
||||
|
|
|
@ -210,7 +210,7 @@ static void replayview_drawitem(void *n, int item, int cnt) {
|
|||
|
||||
case 1:
|
||||
a = AL_Center;
|
||||
strncpy(tmp, rpy->playername, 128);
|
||||
strlcpy(tmp, rpy->playername, sizeof(tmp));
|
||||
break;
|
||||
|
||||
case 2:
|
||||
|
|
|
@ -27,7 +27,7 @@ void save_rpy(void *a) {
|
|||
|
||||
char prepr[16], drepr[16];
|
||||
plrmode_repr(prepr, 16, rpy->stages[0].plr_char, rpy->stages[0].plr_shot);
|
||||
strncpy(drepr, difficulty_name(rpy->stages[0].diff), 16);
|
||||
strlcpy(drepr, difficulty_name(rpy->stages[0].diff), 16);
|
||||
drepr[0] += 'a' - 'A';
|
||||
|
||||
if(rpy->numstages > 1)
|
||||
|
|
|
@ -18,9 +18,9 @@ Animation *init_animation(char *filename) {
|
|||
char *beg = strstr(filename, "gfx/") + 4;
|
||||
char *end = strrchr(filename, '.');
|
||||
|
||||
char *name = malloc(end - beg + 1);
|
||||
memset(name, 0, end - beg + 1);
|
||||
strncpy(name, beg, end-beg);
|
||||
int sz = end - beg + 1;
|
||||
char *name = malloc(sz);
|
||||
strlcpy(name, beg, sz);
|
||||
|
||||
char* tok;
|
||||
strtok(name, "_");
|
||||
|
|
|
@ -131,9 +131,9 @@ Sound *load_sound_or_bgm(char *filename, Sound **dest, const char *res_directory
|
|||
char *beg = strstr(filename, res_directory) + strlen(res_directory);
|
||||
char *end = strrchr(filename, '.');
|
||||
|
||||
snd->name = malloc(end - beg + 1);
|
||||
memset(snd->name, 0, end-beg + 1);
|
||||
strncpy(snd->name, beg, end-beg);
|
||||
int sz = end - beg + 1;
|
||||
snd->name = malloc(sz);
|
||||
strlcpy(snd->name, beg, sz);
|
||||
|
||||
printf("-- loaded '%s' as '%s', type %s\n", filename, snd->name, type);
|
||||
|
||||
|
|
|
@ -125,10 +125,9 @@ Model *load_model(char *filename) {
|
|||
char *beg = strstr(filename, "models/") + 7;
|
||||
char *end = strrchr(filename, '.');
|
||||
|
||||
m->name = malloc(end - beg + 1);
|
||||
memset(m->name, 0, end-beg + 1);
|
||||
strncpy(m->name, beg, end-beg);
|
||||
|
||||
int sz = end - beg + 1;
|
||||
m->name = malloc(sz);
|
||||
strlcpy(m->name, beg, sz);
|
||||
|
||||
parse_obj(filename, &data);
|
||||
|
||||
|
|
|
@ -75,8 +75,8 @@ char *copy_segment(char *text, char *delim, int *size) {
|
|||
return NULL;
|
||||
|
||||
*size = end-beg;
|
||||
seg = malloc(*size);
|
||||
strncpy(seg, beg, *size);
|
||||
seg = malloc(*size+1);
|
||||
strlcpy(seg, beg, *size+1);
|
||||
|
||||
return seg;
|
||||
}
|
||||
|
@ -135,11 +135,11 @@ void load_shader_snippets(char *filename, char *prefix) {
|
|||
memset(vtext, 0, vhsize + ssize + vfsize + 1);
|
||||
memset(ftext, 0, fhsize + 1);
|
||||
|
||||
strncpy(vtext, vhead, vhsize);
|
||||
strncpy(ftext, fhead, fhsize);
|
||||
strlcpy(vtext, vhead, vhsize+1);
|
||||
strlcpy(ftext, fhead, fhsize+1);
|
||||
|
||||
strncpy(vtext+vhsize, sec, ssize);
|
||||
strncpy(vtext+vhsize+ssize, vfoot, vfsize);
|
||||
strlcpy(vtext+vhsize, sec, ssize+1);
|
||||
strlcpy(vtext+vhsize+ssize, vfoot, vfsize+1);
|
||||
|
||||
} else if(ffoot) {
|
||||
ftext = malloc(fhsize + ssize + ffsize + 1);
|
||||
|
@ -148,19 +148,19 @@ void load_shader_snippets(char *filename, char *prefix) {
|
|||
memset(ftext, 0, fhsize + ssize + ffsize + 1);
|
||||
memset(vtext, 0, vhsize + 1);
|
||||
|
||||
strncpy(ftext, fhead, fhsize);
|
||||
strncpy(vtext, vhead, vhsize);
|
||||
strlcpy(ftext, fhead, fhsize+1);
|
||||
strlcpy(vtext, vhead, vhsize+1);
|
||||
|
||||
strncpy(ftext+fhsize, sec, ssize);
|
||||
strncpy(ftext+fhsize+ssize, ffoot, ffsize);
|
||||
strlcpy(ftext+fhsize, sec, ssize+1);
|
||||
strlcpy(ftext+fhsize+ssize, ffoot, ffsize+1);
|
||||
}
|
||||
|
||||
nbuf = malloc(nend-name+prefixlen+1);
|
||||
strcpy(nbuf, prefix);
|
||||
strncat(nbuf+prefixlen, name, nend-name);
|
||||
strlcat(nbuf+prefixlen, name, nend-name+1);
|
||||
nbuf[nend-name+prefixlen] = 0;
|
||||
|
||||
load_shader(vtext, ftext, nbuf, nend-name+prefixlen);
|
||||
load_shader(vtext, ftext, nbuf, nend-name+prefixlen+1);
|
||||
printf("--- loaded snippet as shader '%s'\n", nbuf);
|
||||
|
||||
free(nbuf);
|
||||
|
@ -195,11 +195,11 @@ void load_shader_file(char *filename) {
|
|||
beg = strstr(filename, "shader/") + 7;
|
||||
end = strrchr(filename, '.');
|
||||
|
||||
name = malloc(end-beg + 1);
|
||||
strncpy(name, beg, end-beg);
|
||||
name[end-beg] = 0;
|
||||
int sz = end - beg + 1;
|
||||
name = malloc(sz);
|
||||
strlcpy(name, beg, sz);
|
||||
|
||||
load_shader(vtext, ftext, name, end-beg);
|
||||
load_shader(vtext, ftext, name, sz);
|
||||
|
||||
printf("-- loaded '%s' as '%s'\n", filename, name);
|
||||
|
||||
|
@ -237,9 +237,8 @@ void load_shader(char *vtext, char *ftext, char *name, int nsize) {
|
|||
|
||||
print_program_info_log(sha->prog);
|
||||
|
||||
sha->name = malloc(nsize + 1);
|
||||
strncpy(sha->name, name, nsize);
|
||||
sha->name[nsize] = 0;
|
||||
sha->name = malloc(nsize);
|
||||
strlcpy(sha->name, name, nsize);
|
||||
|
||||
cache_uniforms(sha);
|
||||
}
|
||||
|
|
|
@ -86,9 +86,9 @@ Texture *load_texture(const char *filename) {
|
|||
char *beg = strstr(filename, "gfx/") + 4;
|
||||
char *end = strrchr(filename, '.');
|
||||
|
||||
texture->name = malloc(end - beg + 1);
|
||||
memset(texture->name, 0, end-beg + 1);
|
||||
strncpy(texture->name, beg, end-beg);
|
||||
int sz = end - beg + 1;
|
||||
texture->name = malloc(sz);
|
||||
strlcpy(texture->name, beg, sz);
|
||||
|
||||
printf("-- loaded '%s' as '%s'\n", filename, texture->name);
|
||||
|
||||
|
|
Loading…
Reference in a new issue