| 1591 | #endif |
| 1592 | |
| 1593 | static void |
| 1594 | DeserializeNumber(char *szLocation, char *pBuffer, size_t zBUfferLength, struct CTypeDescriptor *pType, unsigned long ulNumber) |
| 1595 | { |
| 1596 | |
| 1597 | ASSERT(szLocation); |
| 1598 | ASSERT(pBuffer); |
| 1599 | ASSERT(zBUfferLength > 0); |
| 1600 | ASSERT(pType); |
| 1601 | |
| 1602 | switch(pType->mTypeKind) { |
| 1603 | case KIND_INTEGER: |
| 1604 | if (ISSET(pType->mTypeInfo, NUMBER_SIGNED_BIT)) { |
| 1605 | longest L = llliGetNumber(szLocation, pType, ulNumber); |
| 1606 | DeserializeNumberSigned(pBuffer, zBUfferLength, pType, L); |
| 1607 | } else { |
| 1608 | ulongest UL = llluGetNumber(szLocation, pType, ulNumber); |
| 1609 | DeserializeNumberUnsigned(pBuffer, zBUfferLength, pType, UL); |
| 1610 | } |
| 1611 | break; |
| 1612 | case KIND_FLOAT: |
| 1613 | #ifdef _KERNEL |
| 1614 | Report(true, "UBSan: Unexpected Float Type in %s\n", szLocation); |
| 1615 | /* NOTREACHED */ |
| 1616 | #else |
| 1617 | DeserializeNumberFloat(szLocation, pBuffer, zBUfferLength, pType, ulNumber); |
| 1618 | #endif |
| 1619 | break; |
| 1620 | case KIND_UNKNOWN: |
| 1621 | Report(true, "UBSan: Unknown Type in %s\n", szLocation); |
| 1622 | /* NOTREACHED */ |
| 1623 | break; |
| 1624 | } |
| 1625 | } |
| 1626 | |
| 1627 | static const char * |
| 1628 | DeserializeTypeCheckKind(uint8_t hhuTypeCheckKind) |
no test coverage detected