История изменений
Исправление RiseOfDeath, (текущая версия) :
В функции get_information :
parse_answer_from_server ( &buf[0] );
Зачем? buf сам по себе указатель на начало массива. Можно просто передать buf в качестве аргумента.
В функции parse_answer_from_server:
Если хоть один из указателей на «аргументы» равен нулю (т.е. вы не нашли такой «аргумент» при парсинге) вы очищаете память у всех «аргументов», а потом безусловно пихаете в sprintf строки по невалидном указателям. Если вам повезет и прога тут не упадет с сегфолтом, то она тут же упадет с double free, т.к. вы потом (опять же бузесловно) очищаете память под «аргументы», даже если уже очистили ее до.
Кроме того, в функции get_information вы проверяете что ваш answer не NULL, однако таковым он окажется только если память не будет выделена в parse_answer_from_server, но тогда вы тут же сегфолтнетесь на memset.
Исправление RiseOfDeath, :
В функции get_information :
parse_answer_from_server ( &buf[0] );
Зачем? buf сам по себе указатель на начало массива. Можно просто передать buf в качестве аргумента.
В функции parse_answer_from_server:
Если хоть один из указателей на «аргументы» равен нулю (т.е. вы не нашли такой «аргумент» при парсинге) вы очищаете память у всех «аргументов», а потом безусловно пихаете в sprintf строки по невалидном указателям. Если вам повезет и прога тут не упадет с сегфолтом, то она тут же упадет с double free, т.к. вы потом (опять же бузесловно) очищаете память под «аргументы», даже если уже очистили ее до.
Исправление RiseOfDeath, :
В функции get_information :
parse_answer_from_server ( &buf[0] );
Зачем? buf сам по себе указатель на начало массива. Можно просто передать buf в качестве аргумента.
В функции parse_answer_from_server:
Если хоть один из указателей на «аргументы» равен нулю вы очищаете память у всех «аргументов», а потом безусловно пихаете в sprintf строки по невалидном указателям. Если вам повезет и прога тут не упадет с сегфолтом, то она тут же упадет с double free, т.к. вы потом (опять же бузесловно) очищаете память под «аргументы», даже если уже очистили ее до.
Исходная версия RiseOfDeath, :
parse_answer_from_server ( &buf[0] );
Зачем? buf сам по себе указатель на начало массива. Можно просто передать buf в качестве аргумента.
В функции parse_answer_from_server, если хоть один из указателей на «аргументы» равен нулю вы очищаете память у всех «аргументов», а потом безусловно пихаете в sprintf строки по невалидном указателям. Если вам повезет и прога тут не упадет с сегфолтом, то она тут же упадет с double free, т.к. вы потом (опять же бузесловно) очищаете память под «аргументы», даже если уже очистили ее до.