C言語でいわゆるサニタイジングを行う(苦戦中)

色々あってCで書かれているCGIに対してサニタイジング処理をしなければ
ならなくなってしまい、かなり苦戦中。Cに不慣れなことも手伝って今日は殆ど進行しなかった。
Perlなら

sub sanitize {
    my $str = shift;
    $str =~ s/&/"&"/g;
    $str =~ s/</"&gt;"/g;
    $str =~ s/>/"&lt;"/g;
    $str =~ s/\"/"&quot;"/g;
    $str =~ s/\'/"&#39;"/g;
    return $str;
}

とかやれば簡単に処理できてしまうけど、*1
Cだと文字列とサニタイズ対象文字を関数に渡して1文字ずつ照合していかねばならないんでちょっと大変。

void exec_sanitize(char *str, const char *tgt) {
    char *current, *p;
    size_t strsize;
    
    current = str;
    strsize = strlen(current);

    while (strsize--) {
        if (*current == *tgt) {
           p = current + 1;
           /* ここからコメント */
           /* ここでサニタイズ処理を行う */
           /* ここまでコメント */
           memmove(current, p, sizeof(p));
           strsize--;
           continue;
        }
        current++;
    }
    *current = '\0';
}

までは思いついたけど……。*2

*1:7行目はうろ覚えなんで勘弁してください

*2:未確認且つただの覚え書き。これ多分バグってる