elliptic@ellipse:~$ diff axspawn-0.2.1/axspawn.c axspawn-
0.2.1a/axspawn.c
491c491
< envc = 0;
–
> envc = 0;
493c493
< sprintf(envp[envc++], “AXCALL=%s”, call);
–
> sprintf(envp[envc++], “AXCALL=%.22s”, call);
495c495
< sprintf(envp[envc++], “CALL=%s”, (char *)user);
–
> sprintf(envp[envc++], “CALL=%.24s”, (char
*)user); 497c497
< sprintf(envp[envc++], “PROTOCOL=%s”, protocol);
–
> sprintf(envp[envc++], “PROTOCOL=%.20s”,
protocol); 500c500
< envp[envc] = NULL;
–
> envp[envc] = NULL;Видно, что в первой версии программы axspawn.c используется функция sprintf без всяких ограничений на длину выводимой строки данных, а во второй – введено ограничение на длину выводимой строки в спецификации преобразования. В некоторых случаях производитель может выпустить патч, который будет сообщать отличия между двумя версиями программы. Обычно такие патчи выпускаются для операционных систем типа BSD (BSD – Berkeley Software Design Incorporated – компания-разработчик программного обеспечения), например FreeBSD. В январе 2002 года была найдена уязвимость в пакете инструментальных средств операционной системы FreeBSD. До ее устранения пользователь мог извлечь данные во временную директорию и изменить их. До тех пор, пока уязвимость не была всесторонне изучена, патч pkg_add сообщал точное местонахождение уязвимости:
– usr.sbin/pkg_install/lib/pen.c 17 May 2001 12:33:39 -0000
+++ usr.sbin/pkg_install/lib/pen.c 7 Dec 2001 20:58:46 -0000
@@ -106,7 +106,7 @@
cleanup(0);
errx(2, __FUNCTION__ “: can’t mktemp “%s””, pen);
}
– if (chmod(pen, 0755) == FAIL) {
+ if (chmod(pen, 0700) == FAIL) {
cleanup(0);
errx(2, __FUNCTION__ “: can’t mkdir “%s””, pen);
}