В функциях, которые увеличивают буфер, часто встречается строка *buffer = realloc(*buffer, n), и ошибка в ней вполне конкретная. Если выделение памяти не удалось, единственный владеющий указатель затирается нулём. По черновику C11 старый объект в этом случае остаётся выделенным и неизменным. Функция теряет единственный путь к памяти, которую ей ещё предстоит освободить.
Функция, о которой идёт речь, получает от вызывающего char **buffer и size_t *capacity. *buffer владеет корректным выделением, а запрошенный размер строго положителен и больше текущей ёмкости.
Результат сначала нужно получить во временный указатель. При неудаче функция сообщает об ошибке выделения и оставляет оба выходных параметра как были. При успехе она записывает возвращённый указатель и новую ёмкость.
В документацию стоит добавить ещё одно правило. Успешный realloc завершает время жизни старого объекта, поэтому сохранённые вызывающим псевдонимы недействительны, даже если возвращённый адрес совпал. Сейчас в черновике функция возвращает только успех или неудачу и требует пересоздавать псевдонимы после успеха. Думаю, этого достаточно, но не уверен, что правило о псевдонимах в нынешней формулировке достаточно ясно.

