Japin Li <japi...@hotmail.com> writes: > Today, I try to use repeat() to generate 1GB text, and it occurs invalid > memory > alloc request size [1]. It is a limit from palloc(), then I try to reduce it, > it still complains out of memory which comes from enlargeStringInfo() [2]. > The > documentation about repect() [3] doesn't mentaion the limitation.
It would probably make sense for repeat() to check this explicitly: if (unlikely(pg_mul_s32_overflow(count, slen, &tlen)) || - unlikely(pg_add_s32_overflow(tlen, VARHDRSZ, &tlen))) + unlikely(pg_add_s32_overflow(tlen, VARHDRSZ, &tlen)) || + unlikely(!AllocSizeIsValid(tlen))) ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("requested length too large"))); The failure in enlargeStringInfo is probably coming from trying to construct an output message to send back to the client. That's going to be a lot harder to do anything nice about (and even if the backend didn't fail, the client might). regards, tom lane