4110. [bug] Address memory leaks / null pointer dereferences
on out of memory. [RT #39310]
(cherry picked from commit b292230ab8)
This commit is contained in:
@@ -61,7 +61,8 @@ my_send(isc_task_t *task, isc_event_t *event) {
|
||||
isc_task_shutdown(task);
|
||||
}
|
||||
|
||||
isc_mem_put(mctx, dev->region.base, dev->region.length);
|
||||
if (dev->region.base != NULL)
|
||||
isc_mem_put(mctx, dev->region.base, dev->region.length);
|
||||
|
||||
isc_event_free(&event);
|
||||
}
|
||||
@@ -96,8 +97,8 @@ my_recv(isc_task_t *task, isc_event_t *event) {
|
||||
if (dev->result != ISC_R_SUCCESS) {
|
||||
isc_socket_detach(&sock);
|
||||
|
||||
isc_mem_put(mctx, dev->region.base,
|
||||
dev->region.length);
|
||||
if (dev->region.base != NULL)
|
||||
isc_mem_put(mctx, dev->region.base, dev->region.length);
|
||||
isc_event_free(&event);
|
||||
|
||||
isc_task_shutdown(task);
|
||||
@@ -112,8 +113,11 @@ my_recv(isc_task_t *task, isc_event_t *event) {
|
||||
sprintf(buf, "\r\nReceived: %.*s\r\n\r\n",
|
||||
(int)dev->n, (char *)region.base);
|
||||
region.base = isc_mem_get(mctx, strlen(buf) + 1);
|
||||
region.length = strlen(buf) + 1;
|
||||
strcpy((char *)region.base, buf); /* strcpy is safe */
|
||||
if (region.base != NULL) {
|
||||
region.length = strlen(buf) + 1;
|
||||
strcpy((char *)region.base, buf); /* strcpy is safe */
|
||||
} else
|
||||
region.length = 0;
|
||||
isc_socket_send(sock, ®ion, task, my_send, event->ev_arg);
|
||||
} else {
|
||||
region = dev->region;
|
||||
@@ -143,6 +147,8 @@ my_http_get(isc_task_t *task, isc_event_t *event) {
|
||||
if (dev->result != ISC_R_SUCCESS) {
|
||||
isc_socket_detach(&sock);
|
||||
isc_task_shutdown(task);
|
||||
if (dev->region.base != NULL)
|
||||
isc_mem_put(mctx, dev->region.base, dev->region.length);
|
||||
isc_event_free(&event);
|
||||
return;
|
||||
}
|
||||
@@ -179,8 +185,11 @@ my_connect(isc_task_t *task, isc_event_t *event) {
|
||||
strcpy(buf, "GET / HTTP/1.1\r\nHost: www.flame.org\r\n"
|
||||
"Connection: Close\r\n\r\n");
|
||||
region.base = isc_mem_get(mctx, strlen(buf) + 1);
|
||||
region.length = strlen(buf) + 1;
|
||||
strcpy((char *)region.base, buf); /* This strcpy is safe. */
|
||||
if (region.base != NULL) {
|
||||
region.length = strlen(buf) + 1;
|
||||
strcpy((char *)region.base, buf); /* This strcpy is safe. */
|
||||
} else
|
||||
region.length = 0;
|
||||
|
||||
isc_socket_send(sock, ®ion, task, my_http_get, event->ev_arg);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user