Подробности
[В начало]
Проблема в стандарте № S0555
Краткое описание
Нечётко определена разница между кодами ошибок REG_EBRACE и REG_BADBR для функции
Подробное описание
Описание функции regcomp() не полностью определяет, каким должно быть возвращаемое значение функции в случае, когда базовое регулярное выражение (basic regular expression) содержит в себе ошибку вида: количество “\{“ превышает количество ”\}”. Такие ситуации могут рассматриваться как Content of "\{\}" invalid (что соответствует REG_BADBR), так и "\{\}" imbalance (что соответствует REG_EBRACE). Пример ошибочного регулярного выражения: a\{\{3,4\} Для кодов ошибок, описываемых в секции ERRORS существует специальная оговорка (раздел 2.3 Error Numbers): If more than one error occurs in processing a function call, any one of the possible errors may be returned, as the order of detection is undefined. Однако, у читателя нет оснований для применения этой оговорки к кодам ошибок, возвращаемым функцией regcomp().
Раздел стандарта
The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition (SUS 3.0), Chapter 9. Regular Expressions, the description of the <nobr>regcomp()</nobr> function.
Способы устранения
Добавить оговорку вида: If more than one error occurs in processing a function call, any one of the possible constants may be returned, as the order of detection is undefined. Или чётко определить, какое значение должна возвращать regcomp() в случаях, когда количество “\{“ больше, чем количество “\}”.
[В начало]