| 352 | static void HandlePointerOverflow(bool isFatal, struct CPointerOverflowData *pData, unsigned long ulBase, unsigned long ulResult); |
| 353 | |
| 354 | static void |
| 355 | HandleOverflow(bool isFatal, struct COverflowData *pData, unsigned long ulLHS, unsigned long ulRHS, const char *szOperation) |
| 356 | { |
| 357 | char szLocation[LOCATION_MAXLEN]; |
| 358 | char szLHS[NUMBER_MAXLEN]; |
| 359 | char szRHS[NUMBER_MAXLEN]; |
| 360 | |
| 361 | ASSERT(pData); |
| 362 | |
| 363 | if (isAlreadyReported(&pData->mLocation)) |
| 364 | return; |
| 365 | |
| 366 | DeserializeLocation(szLocation, LOCATION_MAXLEN, &pData->mLocation); |
| 367 | DeserializeNumber(szLocation, szLHS, NUMBER_MAXLEN, pData->mType, ulLHS); |
| 368 | DeserializeNumber(szLocation, szRHS, NUMBER_MAXLEN, pData->mType, ulRHS); |
| 369 | |
| 370 | Report(isFatal, "UBSan: Undefined Behavior in %s, %s integer overflow: %s %s %s cannot be represented in type %s\n", |
| 371 | szLocation, ISSET(pData->mType->mTypeInfo, NUMBER_SIGNED_BIT) ? "signed" : "unsigned", szLHS, szOperation, szRHS, pData->mType->mTypeName); |
| 372 | } |
| 373 | |
| 374 | static void |
| 375 | HandleNegateOverflow(bool isFatal, struct COverflowData *pData, unsigned long ulOldValue) |
no test coverage detected