| 467 | |
| 468 | |
| 469 | static omError_t omDoCheckTrackAddr(omTrackAddr d_addr, void* addr, void* bin_size, omTrackFlags_t flags, char level, |
| 470 | omError_t report, OM_FLR_DECL) |
| 471 | { |
| 472 | if (flags & OM_FUSED) |
| 473 | omAddrCheckReturnError(d_addr->next != ((void*) -1), omError_FreedAddrOrMemoryCorrupted); |
| 474 | else |
| 475 | omAddrCheckReturnError(d_addr->next != NULL && omCheckPtr(d_addr->next, omError_MaxError, OM_FLR_VAL), |
| 476 | omError_FreedAddrOrMemoryCorrupted); |
| 477 | omAddrCheckReturnCorrupted(omCheckFlags(d_addr->flags)); |
| 478 | |
| 479 | omAddrCheckReturnError(level > 1 && (flags & OM_FUSED) && omIsInKeptAddrList(d_addr), omError_FreedAddr); |
| 480 | omAddrCheckReturnError((d_addr->flags & OM_FUSED) ^ (flags & OM_FUSED), omError_FreedAddrOrMemoryCorrupted); |
| 481 | |
| 482 | if (flags & OM_FBINADDR && flags & OM_FSIZE) |
| 483 | omAddrCheckReturnError(omTrackAddr_2_OutSize(d_addr) != (size_t) bin_size, omError_WrongSize); |
| 484 | |
| 485 | if (d_addr->track > 2) |
| 486 | { |
| 487 | if (d_addr->flags & OM_FBIN) |
| 488 | { |
| 489 | omAddrCheckReturnCorrupted(!omIsKnownTopBin((omBin) d_addr->bin_size, 1)); |
| 490 | } |
| 491 | else |
| 492 | { |
| 493 | omAssume(d_addr->flags & OM_FSIZE); |
| 494 | |
| 495 | omAddrCheckReturnCorrupted(!OM_IS_ALIGNED(d_addr->bin_size)); |
| 496 | omAddrCheckReturnCorrupted((size_t) d_addr->bin_size > |
| 497 | omSizeOfBinAddr(d_addr) |
| 498 | - omTrackAddr_2_SizeOfTrackAddrHeader(d_addr) |
| 499 | - OM_MIN_SIZEOF_BACK_PATTERN); |
| 500 | /* Hmm .. here I'd love to have a stricter bound */ |
| 501 | omAddrCheckReturnCorrupted((size_t) d_addr->bin_size < SIZEOF_OM_ALIGNMENT); |
| 502 | } |
| 503 | |
| 504 | omAddrCheckReturnError((flags & OM_FBINADDR) && !((d_addr->flags & OM_FBIN) || ((size_t) d_addr->bin_size <= OM_MAX_BLOCK_SIZE)), omError_NotBinAddr); |
| 505 | |
| 506 | if (flags & OM_FBIN) |
| 507 | { |
| 508 | if (d_addr->flags & OM_FBIN) |
| 509 | omAddrCheckReturnError(((omBin) d_addr->bin_size)->sizeW != ((omBin) bin_size)->sizeW, omError_WrongBin); |
| 510 | else |
| 511 | omAddrCheckReturnError((((omBin) bin_size)->sizeW << LOG_SIZEOF_LONG) != OM_ALIGN_SIZE((size_t) d_addr->bin_size), omError_WrongBin); |
| 512 | } |
| 513 | else if (flags & OM_FSIZE) |
| 514 | { |
| 515 | if (d_addr->flags & OM_FBIN) |
| 516 | { |
| 517 | omAddrCheckReturnError((((omBin) d_addr->bin_size)->sizeW << LOG_SIZEOF_LONG) < ((size_t) bin_size), omError_WrongSize); |
| 518 | } |
| 519 | else |
| 520 | { |
| 521 | omAddrCheckReturnError((size_t) d_addr->bin_size < (size_t) bin_size, omError_WrongSize); |
| 522 | } |
| 523 | } |
| 524 | |
| 525 | omAddrCheckReturnError(omCheckPattern(omTrackAddr_2_FrontPattern(d_addr), OM_FRONT_PATTERN,omTrackAddr_2_SizeOfFrontPattern(d_addr)),omError_FrontPattern); |
| 526 | omAddrCheckReturnError(omCheckPattern(omTrackAddr_2_BackPattern(d_addr), OM_BACK_PATTERN,omTrackAddr_2_SizeOfBackPattern(d_addr)),omError_BackPattern); |
no test coverage detected