簡體   English   中英

D_FORTIFY_SOURCE 和 gcc

[英]D_FORTIFY_SOURCE and gcc

此函數用於生成 md5hash:

out = malloc(32+1);
void md5sum( u_char *secret_data, int secret_len, char *in,char *out ) {
        ngx_md5_t       md5;
        u_char hash[16];
        ngx_md5_init(&md5);
        ngx_md5_update(&md5, in, strlen(in));
        ngx_md5_update(&md5, secret_data, secret_len);
        ngx_md5_final(hash, &md5);
        int ii;
        for (ii = 0; ii &lqt; 16; ii++) {
                char tt[2];
                sprintf(tt, "%02x", hash[ii] );
                strcat(out,tt);

        }
}

它有效,但是如果我將選項 D_FORTIFY_SOURCE 與 gcc 編譯器一起使用,則會出現分段錯誤。 如果我將tt類型更改為: char tt[3] ,則一切正常。 為什么?

sprintf 正在放入一個空字符來終止字符串。 所以你需要一個三字符數組來保存兩個字符的字符串; 它真的是 'a' 'b' '\\0'。

您遇到分段錯誤,因為您試圖將 3 個字符寫入 2 個字符的數組。 (NUL 也是一個字符)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM