此功能是產生md5hash:D_FORTIFY_SOURCE和gcc
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]
,則一切正常。爲什麼?