История изменений
Исправление 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';