2016-03-30 38 views
0

Flawfinderが発見したこれら2つの警告は解決できません。あなたは私に正しいコードの例で答えることができますか?私はこのFlawfinder警告(CWE-78、CWE-120)を解決できません

最終結果:

flawfinder_exercise_old_SAL_syntax.cpp:48: [4] (shell) system: 
    This causes a new program to execute and is difficult to use safely 
    (CWE-78). try using a library call that implements the same functionality 
    if available.<br> 
flawfinder_exercise_old_SAL_syntax.cpp:36: [2] (buffer) memcpy: 
    Does not check for buffer overflows when copying to destination (CWE-120). 
    Make sure destination can always hold the source data.* 

これはライン48の1である:これは、ライン36の1である

int execute(char *buf) { 
    return system(buf); // pass buf as command to be executed by the OS 
} 

void copy_data(char *buf1, 
       char *buf2) { 
    memcpy(buf2,buf1,STR_SIZE); 
    buf2[STR_SIZE-1] = NULL; // null terminate, just in case 
} 
+1

「システム」機能の正しいコードは、それを使用しないでください。この関数は、コントロールから別のプログラムを実行する可能性があるため、本質的に安全ではありません。 'memcpy'を使った2番目のものはやや明示的ですが、' buf2'のサイズは潜在的に未知であるため、潜在的なオーバーフローをチェックしません。しかし、これらはただの警告であることを忘れないでください。 –

+0

こんにちは!答えをありがとう!私はあなたが言ったことを知っていますが、学校ではこの警告を解決しなければなりません。どうすればいいのかわかりません。: – ZioNick

+0

'memcpy'の場合、' copy_data(char * buf1、char * buf2、int –

答えて

0

ことができますあなたはフォークしますか?

int execute(char *buf) { 

    pid_t pid = fork(); 

    if (! pid) 
    { 
     execve(buf); 
    } 
    return waitpid(pid); 
} 
+0

'execve'はおそらく' system'と同じ警告を引き起こします。 –

+0

AHHHHHH 8エラー...: '( – ZioNick

+0

あなたはこれらのエラーを投稿できますか? – Boiethios

関連する問題