--- System.cc +++ System.cc @@ -43,7 +43,7 @@ static inline int memReadStat(int field) pid_t pid = getpid(); int value; - sprintf(name, "/proc/%d/statm", pid); + snprintf(name, 256, "/proc/%d/statm", pid); FILE* in = fopen(name, "rb"); if (in == NULL) return 0; @@ -60,7 +60,7 @@ static inline int memReadPeak(void) char name[256]; pid_t pid = getpid(); - sprintf(name, "/proc/%d/status", pid); + snprintf(name, 256, "/proc/%d/status", pid); FILE* in = fopen(name, "rb"); if (in == NULL) return 0; --- Vec.h +++ Vec.h @@ -100,7 +100,13 @@ void vec::capacity(Size min_cap) { Size add = max((min_cap - cap + 1) & ~1, ((cap >> 1) + 2) & ~1); // NOTE: grow by approximately 3/2 const Size size_max = std::numeric_limits::max(); if ( ((size_max <= std::numeric_limits::max()) && (add > size_max - cap)) - || (((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) && errno == ENOMEM) ) + || ( +#ifdef _DEFAULT_SOURCE + ((data = (T*)::reallocarray(data, (cap += add), sizeof(T))) == NULL) +#else + ((data = (T*)::realloc(data, (cap += add) * sizeof(T))) == NULL) +#endif + && errno == ENOMEM) ) throw OutOfMemoryException(); }