MCPcopy Create free account
hub / github.com/Singular/Singular / omDoCheckTrackAddr

Function omDoCheckTrackAddr

omalloc/omDebugTrack.c:469–572  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

467
468
469static 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);

Callers 1

omCheckTrackAddrFunction · 0.85

Calls 12

omCheckPtrFunction · 0.85
omCheckFlagsFunction · 0.85
omIsInKeptAddrListFunction · 0.85
omTrackAddr_2_OutSizeFunction · 0.85
omIsKnownTopBinFunction · 0.85
omSizeOfBinAddrFunction · 0.85
omCheckPatternFunction · 0.85

Tested by

no test coverage detected