サニタイズ問題解決
昨日の続き。そういえばstring.hにstrstrっつー非常に便利な関数がある事を思い出したんで
それを使って関数を組み直すことにした。
いくつかの解説サイトや書籍を参考にしつつ、昨日作った関数からmemmoveのアイディアを頂きつつ
void exec_sanitize(char *str, const char *tgt, const char *after) { char *match; size_t tgt_len; size_t aft_len; tgt_len = strlen(tgt); aft_len = strlen(after); while((match = strstr(str, tgt)) != NULL) { memmove(match + aft_len, match + tgt_len, strlen(match) - tgt_len ); memmove(match, aft, aft_len); } } void sanitize(char *str) { exec_sanitize(str, "&", "&"); exec_sanitize(str, "<", "<"); exec_sanitize(str, ">", ">"); exec_sanitize(str, "\"", """); exec_sanitize(str, "'", "'"); }
上記みたいな感じに。