| 1954 | } |
| 1955 | |
| 1956 | const ValueFlow::Value * Token::getInvalidValue(const Token *ftok, nonneg int argnr, const Settings &settings) const |
| 1957 | { |
| 1958 | if (!mImpl->mValues) |
| 1959 | return nullptr; |
| 1960 | const ValueFlow::Value *ret = nullptr; |
| 1961 | for (auto it = mImpl->mValues->begin(); it != mImpl->mValues->end(); ++it) { |
| 1962 | if (it->isImpossible()) |
| 1963 | continue; |
| 1964 | if ((it->isIntValue() && !settings.library.isIntArgValid(ftok, argnr, it->intvalue, settings)) || |
| 1965 | (it->isFloatValue() && !settings.library.isFloatArgValid(ftok, argnr, it->floatValue, settings))) { |
| 1966 | if (!ret || ret->isInconclusive() || (ret->condition && !it->isInconclusive())) |
| 1967 | ret = &(*it); |
| 1968 | if (!ret->isInconclusive() && !ret->condition) |
| 1969 | break; |
| 1970 | } |
| 1971 | } |
| 1972 | if (ret) { |
| 1973 | if (ret->isInconclusive() && !settings.certainty.isEnabled(Certainty::inconclusive)) |
| 1974 | return nullptr; |
| 1975 | if (ret->condition && !settings.severity.isEnabled(Severity::warning)) |
| 1976 | return nullptr; |
| 1977 | } |
| 1978 | return ret; |
| 1979 | } |
| 1980 | |
| 1981 | const Token *Token::getValueTokenMinStrSize(const Settings &settings, MathLib::bigint* path) const |
| 1982 | { |
no test coverage detected