mirror of
https://github.com/yrutschle/sslh.git
synced 2025-05-31 23:59:22 +03:00
Fix defer_write when deferred_data != begin_deferred_data
I think this currently never happens, but let's not wait until it starts happening and blows up.
This commit is contained in:
parent
b7fafb5039
commit
60b11e4964
9
common.c
9
common.c
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#define SYSLOG_NAMES
|
#define SYSLOG_NAMES
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
|
#include <stddef.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <grp.h>
|
#include <grp.h>
|
||||||
|
|
||||||
@ -285,17 +286,19 @@ int connect_addr(struct connection *cnx, int fd_from)
|
|||||||
int defer_write(struct queue *q, void* data, int data_size)
|
int defer_write(struct queue *q, void* data, int data_size)
|
||||||
{
|
{
|
||||||
char *p;
|
char *p;
|
||||||
|
ptrdiff_t data_offset = q->deferred_data - q->begin_deferred_data;
|
||||||
if (verbose)
|
if (verbose)
|
||||||
fprintf(stderr, "**** writing deferred on fd %d\n", q->fd);
|
fprintf(stderr, "**** writing deferred on fd %d\n", q->fd);
|
||||||
|
|
||||||
p = realloc(q->begin_deferred_data, q->deferred_data_size + data_size);
|
p = realloc(q->begin_deferred_data, data_offset + q->deferred_data_size + data_size);
|
||||||
if (!p) {
|
if (!p) {
|
||||||
perror("realloc");
|
perror("realloc");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
q->deferred_data = q->begin_deferred_data = p;
|
q->begin_deferred_data = p;
|
||||||
p += q->deferred_data_size;
|
q->deferred_data = p + data_offset;
|
||||||
|
p += data_offset + q->deferred_data_size;
|
||||||
q->deferred_data_size += data_size;
|
q->deferred_data_size += data_size;
|
||||||
memcpy(p, data, data_size);
|
memcpy(p, data, data_size);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user