>>причем, речь идет о memory leak, который "просит" чтобы его пофиксили.
>
>Спасибо за комментарий .)
>int converse(int n, const struct pam_message **msg, > resp[i]->resp = strdup(msg[i]->msg); /* FIXME */
>Утечки здесь нет, т.к. буфер, в который производится копирование (resp) инициализируется PAM,
>им же он и освобождается. Т.е. это - проблемы негров .)
Я не уверен на все 100 %, что называется, так как, в текстах PAM-модулей часто встречается такая работа с данными (strdup()), а детального описания интерфейса (API), в котором было бы написано кто, что и как выделяет/освобождает, я не нашел. Однако, там же (в текстах) встречается и проверка на то, что память действительно выделена, причем, если этого не произошло, то выполняется "откат", освобождая все, что успели получить до этого. В твоем патче такого нет:
+ for (i = 0; i < n; ++i) {
+ resp[i]->resp_retcode = 0;
+ resp[i]->resp = strdup(msg[i]->msg); // FIXME
+ }
+
+ return (PAM_SUCCESS);
Если ты брал готовый (чужой) кусок кода, то следовало обратить внимание на его готовность к "реальной жизни", ибо он там *специально* отмечен комментарием.
/poige
--
http://www.morning.ru/~poige/