diff --git a/src/responses.c b/src/responses.c index 4e9b00b..fb365a7 100644 --- a/src/responses.c +++ b/src/responses.c @@ -130,11 +130,12 @@ static int linkedResponse(Connection *conn, case FILE_UNKNOWN_LENGTH: return sendPipe(conn->stream, getCode(code), response.response.file.fd); - case BUFFER: + case BUFFER: case BUFFER_NOFREE: ret = sendBinaryResponse(conn->stream, getCode(code), response.response.buffer.data, response.response.buffer.len); - free(response.response.buffer.data); + if (response.type == BUFFER) + free(response.response.buffer.data); return ret; case DEFAULT: return sendErrorResponse(conn->stream, getCode(code)); diff --git a/src/swebs/types.h b/src/swebs/types.h index 7474ac2..6ece53e 100644 --- a/src/swebs/types.h +++ b/src/swebs/types.h @@ -79,6 +79,7 @@ typedef enum { FILE_KNOWN_LENGTH, FILE_UNKNOWN_LENGTH, BUFFER, + BUFFER_NOFREE, DEFAULT /* Return the default value for this error code */ } ResponseType;