Подробности

[В начало]

Проблема в стандарте № S0555

Краткое описание

Нечётко определена разница между кодами ошибок REG_EBRACE и REG_BADBR для функции regcomp().

Подробное описание

Описание функции 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() в случаях, когда количество “\{“ больше, чем количество “\}”.

[В начало]