Use of obsolete standard function

Устаревшие стандартные программы могут вызвать проблемы мобильности и уязвимости системы обеспечения безопасности

Описание

Использование устаревшей стандартной функции обнаруживает вызовы стандартных программ стандартной функции, которые рассматриваются наследием, удаленным, удержанным от использования или устаревшим стандартами кодирования C/C++.

Устаревшая функцияСтандартыРискЗаменяющая функция
asctimeУдержанный от использования в POSIX.1-2008Не ориентированный на многопотоковое исполнение.strftime или asctime_s
asctime_rУдержанный от использования в POSIX.1-2008Реализация на основе небезопасного функционального sprintf.strftime или asctime_s
bcmp

Удержанный от использования в 4.3BSD

Отмеченный как наследие в POSIX.1-2001.

Возвращается из функции после нахождения первого отличающегося байта, делая его уязвимым для атак временным анализом. memcmp
bcopy

Удержанный от использования в 4.3BSD

Отмеченный как наследие в POSIX.1-2001.

Возвращается из функции после нахождения первого отличающегося байта, делая его уязвимым для атак временным анализом. memcpy или memmove
brk и sbrkОтмеченный как наследие в SUSv2 и POSIX.1-2001. malloc
bsd_signalУдаленный в POSIX.1-2008 sigaction
bzeroОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008. memset
ctimeУдержанный от использования в POSIX.1-2008Не ориентированный на многопотоковое исполнение.strftime или asctime_s
ctime_rУдержанный от использования в POSIX.1-2008Реализация на основе небезопасного функционального sprintf.strftime или asctime_s
cuseridУдаленный в POSIX.1-2001.Не повторно используемый. Точная функциональность не стандартизированные проблемы мобильности порождения.getpwuid
ecvt и fcvtОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008Не повторно используемыйsnprintf
ecvt_r и fcvt_rОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008 snprintf
ftimeУдаленный в POSIX.1-2008 time, gettimeofday, clock_gettime
gamma, gammaf, gammalФункция, не заданная в любом стандарте из-за исторических измененийПроблемы мобильности.tgamma, lgamma
gcvtОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008. snprintf
getcontextУдаленный в POSIX.1-2008.Проблемы мобильности. Используйте поток POSIX вместо этого.
getdtablesizeAPI-функция BSD, не включенная в POSIX.1-2001Проблемы мобильности.sysconf( _SC_OPEN_MAX )
gethostbyaddrУдаленный в POSIX.1-2008Не повторно используемыйgetaddrinfo
gethostbynameУдаленный в POSIX.1-2008Не повторно используемыйgetnameinfo
getpagesizeAPI-функция BSD, не включенная в POSIX.1-2001Проблемы мобильности.sysconf( _SC_PAGESIZE )
getpassУдаленный в POSIX.1-2001.Не повторно используемый.getpwuid
getwНе существующий в POSIX.1-2001. fread
getwdОтмеченное наследие в POSIX.1-2001. Удаленный в POSIX.1-2008. getcwd
indexОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008. strchr
makecontextУдаленный в POSIX.1-2008.Проблемы мобильности. Используйте поток POSIX вместо этого.
memalignПоявляется в SunOS 4.1.3. Не в 4.4 BSD или POSIX.1-2001 posix_memalign
mktempУдаленный в POSIX.1-2008.Сгенерированные имена предсказуемы и могут вызвать состояние состязания.mkstemp удаляет риск гонки
pthread_attr_getstackaddr и pthread_attr_setstackaddr Неоднозначности в спецификации stackaddr припишите проблемы мобильности причиныpthread_attr_getstack и pthread_attr_setstack
putwНе существующий в POSIX.1-2001.Проблемы мобильности.fwrite
qecvt и qfcvtОтмеченный как наследие в POSIX.1-2001, удаленном в POSIX.1-2008 snprintf
qecvt_r и qfcvt_rОтмеченный как наследие в POSIX.1-2001, удаленном в POSIX.1-2008 snprintf
rand_rОтмеченный как устаревший в POSIX.1-2008  
re_compAPI-функция BSDПроблемы мобильностиregcomp
re_exesAPI-функция BSDПроблемы мобильностиregexec
rindexОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008. strrchr
scalbУдаленный в POSIX.1-2008 scalbln, scalblnf, или scalblnl
sigblock4.3BSD сигнализируют о API, источник которого неясен sigprocmask
sigmask4.3BSD сигнализируют о API, источник которого неясен sigprocmask
sigsetmask4.3BSD сигнализируют о API, источник которого неясен sigprocmask
sigstackИнтерфейс является устаревшим и не реализованный на большинстве платформ.Проблемы мобильности.sigaltstack
sigvec4.3BSD сигнализируют о API, источник которого неясен sigaction
swapcontextУдаленный в POSIX.1-2008Проблемы мобильности. Используйте потоки POSIX.
tmpnam и tmpnam_rОтмеченный как устаревший в POSIX.1-2008.Эта функция генерирует различную строку каждый раз, когда она называется до времен TMP_MAX. Если это называется больше, чем времена TMP_MAX, поведение задано реализацией. mkstemp, tmpfile
ttyslotУдаленный в POSIX.1-2001.  
ualarmОтмеченный как наследие в POSIX.1-2001. Удаленный в POSIX.1-2008.Ошибки под-заданнымsetitimer или POSIX timer_create
usleepУдаленный в POSIX.1-2008. nanosleep
utimeSVr4, POSIX.1-2001. POSIX.1-2008 отмечает как устаревший.  
valloc

Отмеченный как устаревший в 4.3BSD.

Отмеченный как наследие в SUSv2.

Удаленный из POSIX.1-2001

 posix_memalign
vfork

Удаленный из POSIX.1-2008

Под-заданным в предыдущих стандартах.fork
wcswcsЭта функция не была включена в итоговый ISO/IEC 9899:1990/Amendment 1:1995 (E).  wcsstr
WinExecWinAPI обеспечивает эту функцию только для 16-битной совместимости Windows. CreateProcess
LoadModuleWinAPI обеспечивает эту функцию только для 16-битной совместимости Windows. CreateProcess

Фиксация

Фиксация зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Можно реализовать закрепление на любом событии в последовательности. Если детали результата не показывают историю события, можно проследить использование, щелкните правой кнопкой по опциям по исходному коду и смотрите предыдущие связанные события. См. также Интерпретируют Результаты Polyspace Bug Finder.

Смотрите примеры мер ниже.

Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.

Примеры

развернуть все

#include <stdio.h>
#include <time.h> 

void timecheck_bad(int argc, char *argv[])
{
    time_t ticks; 

    ticks = time(NULL);
    printf("%.24s\r\n", ctime(&ticks));
}

В этом примере, функциональном ctime форматирует текущее время и распечатывает его. Однако ctime был удален после C99, потому что он не работает над многопоточными программами.

Коррекция — различная функция времени

Одна возможная коррекция должна использовать strftime вместо этого, потому что эта функция использует buffer size набора.

#include <stdio.h>
#include <string.h>
#include <time.h> 

void timecheck_good(int argc, char *argv[])
{
    char outBuff[1025];
    time_t ticks; 
    struct tm * timeinfo;
    
    memset(outBuff, 0, sizeof(outBuff)); 
    
    ticks = time(NULL);
    timeinfo = localtime(&ticks);
    strftime(outBuff,sizeof(outBuff),"%I:%M%p.",timeinfo);
    fprintf(stdout, outBuff);
}

Информация о результате

Группа: безопасность
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: OBSOLETE_STD_FUNC
Удар: низко
ID CWE: 474, 477

Введенный в R2015b