xo-stringtable2: DString: fail without ub when alloc fails

This commit is contained in:
Roland Conybeare 2026-04-10 20:29:53 -04:00
commit 8e3f7ee147

View file

@ -26,14 +26,16 @@ namespace xo {
void * mem = mm.alloc(typeseq::id<DString>(), void * mem = mm.alloc(typeseq::id<DString>(),
sizeof(DString) + cap); sizeof(DString) + cap);
result = new (mem) DString(); if (mem) {
result = new (mem) DString();
assert(result); assert(result);
result->capacity_ = cap; result->capacity_ = cap;
result->size_ = 0; result->size_ = 0;
if (cap > 0) { if (cap > 0) {
result->chars_[0] = '\0'; result->chars_[0] = '\0';
}
} }
} }
@ -50,10 +52,15 @@ namespace xo {
void * mem = mm.alloc(typeseq::id<DString>(), void * mem = mm.alloc(typeseq::id<DString>(),
sizeof(DString) + cap); sizeof(DString) + cap);
DString * result = new (mem) DString(); DString * result = nullptr;
result->capacity_ = cap;
result->size_ = len; if (mem) {
std::memcpy(result->chars_, cstr, cap); result = new (mem) DString();
result->capacity_ = cap;
result->size_ = len;
std::memcpy(result->chars_, cstr, cap);
}
return result; return result;
} }