MCPcopy Create free account
hub / github.com/Kitware/CMake / expat_malloc

Function expat_malloc

Utilities/cmexpat/lib/xmlparse.c:850–899  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

848void *
849# else
850static void *
851# endif
852expat_malloc(XML_Parser parser, size_t size, int sourceLine) {
853 // Detect integer overflow
854 if (SIZE_MAX - size < sizeof(size_t) + EXPAT_MALLOC_PADDING) {
855 return NULL;
856 }
857
858 const XML_Parser rootParser = getRootParserOf(parser, NULL);
859 assert(rootParser->m_parentParser == NULL);
860
861 const size_t bytesToAllocate = sizeof(size_t) + EXPAT_MALLOC_PADDING + size;
862
863 if ((XmlBigCount)-1 - rootParser->m_alloc_tracker.bytesAllocated
864 < bytesToAllocate) {
865 return NULL; // i.e. signal integer overflow as out-of-memory
866 }
867
868 if (! expat_heap_increase_tolerable(rootParser, bytesToAllocate,
869 sourceLine)) {
870 return NULL; // i.e. signal violation as out-of-memory
871 }
872
873 // Actually allocate
874 void *const mallocedPtr = parser->m_mem.malloc_fcn(bytesToAllocate);
875
876 if (mallocedPtr == NULL) {
877 return NULL;
878 }
879
880 // Update in-block recorded size
881 *(size_t *)mallocedPtr = size;
882
883 // Update accounting
884 rootParser->m_alloc_tracker.bytesAllocated += bytesToAllocate;
885
886 // Report as needed
887 if (rootParser->m_alloc_tracker.debugLevel >= 2) {
888 if (rootParser->m_alloc_tracker.bytesAllocated
889 > rootParser->m_alloc_tracker.peakBytesAllocated) {
890 rootParser->m_alloc_tracker.peakBytesAllocated
891 = rootParser->m_alloc_tracker.bytesAllocated;
892 }
893 expat_heap_stat(rootParser, '+', bytesToAllocate,
894 rootParser->m_alloc_tracker.bytesAllocated,
895 rootParser->m_alloc_tracker.peakBytesAllocated, sourceLine);
896 }
897
898 return (char *)mallocedPtr + sizeof(size_t) + EXPAT_MALLOC_PADDING;
899}
900
901# if defined(XML_TESTING)
902void

Callers 1

expat_reallocFunction · 0.85

Calls 3

getRootParserOfFunction · 0.85
expat_heap_statFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…