LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

Да там мрак.

newa() - это макрос над alloca(), определённый при помощи нестандартного gcc-шного заворачивания кода в выражение: ({...}) И они еще про стандарты что-то брешут.

Стопудов если там покопаться, можно найти места, где можно пробить стек, подсунув процессу «правильные» данные или перехватить управление через переполнение буфера.

А как тебе такой перл?

        l = strlen(identifier);
        header = newa(char, l + 1 + 1 + 2 + 2 + 2 + 2 + 2);

        memcpy(header, identifier, l);
        header[l++] = '\n';
        header[l++] = '\n'; /* unit id */
        header[l++] = '0' + priority;
        header[l++] = '\n';
        header[l++] = '0' + !!level_prefix;
        header[l++] = '\n';
        header[l++] = '0';
        header[l++] = '\n';
        header[l++] = '0';
        header[l++] = '\n';
        header[l++] = '0';
        header[l++] = '\n';

Исходная версия Deleted, :

Да там мрак.

newa() - это макрос над alloca(), определённый при помощи нестандартного gcc-шного заворачивания кода в выражение: ({...}) И они еще про стандартны что-то брешут.

Стопудов если там покопаться, можно найти места, где можно пробить стек, подсунув процессу «правильные» данные или перехватить управление через переполнение буфера.

А как тебе такой перл?

        l = strlen(identifier);
        header = newa(char, l + 1 + 1 + 2 + 2 + 2 + 2 + 2);

        memcpy(header, identifier, l);
        header[l++] = '\n';
        header[l++] = '\n'; /* unit id */
        header[l++] = '0' + priority;
        header[l++] = '\n';
        header[l++] = '0' + !!level_prefix;
        header[l++] = '\n';
        header[l++] = '0';
        header[l++] = '\n';
        header[l++] = '0';
        header[l++] = '\n';
        header[l++] = '0';
        header[l++] = '\n';