ISO/IEC TS 17961 [chrsgnext]

Передача аргументов в функции обработки символов, которые не представимы в качестве неподписанных char

Описание

Определение правила

Передача аргументов в функции обработки символов, которые не представимы как неподписанный char.[1]

Реализация Polyspace

Эта проверка проверяет недопустимое использование стандартной библиотечной целочисленной стандартной программы.

Примеры

расширить все

Проблема

Недопустимое использование стандартной библиотеки целого числа стандартной программы происходит при использовании недопустимых аргументов с целочисленной функцией из стандартной библиотеки. Этот дефект подхватывает:

  • Преобразование символов

    toupper, tolower

  • Проверки символов

    isalnum, isalpha, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit

  • Целочисленное деление

    div, ldiv

  • Абсолютные значения

    abs, labs

Зафиксировать

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

См. примеры исправлений ниже.

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

Пример - Абсолютное значение большого негатива
#include <limits.h>
#include <stdlib.h>

int absoluteValue(void) {

    int neg = INT_MIN;
    return abs(neg);
}

Входное значение для abs является INT_MIN. Абсолютное значение INT_MIN является INT_MAX+1. Это число не может быть представлено типом int.

Коррекция - Изменение входного параметра

Одним из возможных коррекций является изменение значения входа для соответствия возвращаемому типу данных. В этом примере измените значение входа на INT_MIN+1.

#include <limits.h>
#include <stdlib.h>

int absoluteValue(void) {

    int neg = INT_MIN+1;
    return abs(neg);
}

Проверяйте информацию

Решимость: Undecidable
Введенный в R2019a

[1] Выдержки из стандарта «Техническая спецификация ISO/IEC TS 17961 - 2013-11-15» воспроизводятся с согласия АФНОР. Только оригинальный и полный текст стандарта, опубликованный AFNOR Editions - доступный через веб-сайт www.boutique.afnor.org - имеет нормативное значение.