comparison src/c/http.c @ 2070:382911d72e63

Check realloc's return code to prevent segfault on out of memory condition (Part 3)
author Sergey Mironov <grrwlf@gmail.com>
date Tue, 02 Sep 2014 17:37:22 +0000
parents 262dd74df39c
children 739172204214
comparison
equal deleted inserted replaced
2069:262dd74df39c 2070:382911d72e63
95 int r; 95 int r;
96 char *method, *path, *query_string, *headers, *body, *after, *s, *s2; 96 char *method, *path, *query_string, *headers, *body, *after, *s, *s2;
97 97
98 if (back - buf == buf_size - 1) { 98 if (back - buf == buf_size - 1) {
99 char *new_buf; 99 char *new_buf;
100 buf_size *= 2; 100 size_t new_buf_size = buf_size*2;
101 new_buf = realloc(buf, buf_size); 101 new_buf = realloc(buf, new_buf_size);
102 if(!new_buf) {
103 qfprintf(stderr, "Realloc failed while receiving header\n");
104 close(sock);
105 sock = 0;
106 break;
107 }
108 buf_size = new_buf_size;
102 back = new_buf + (back - buf); 109 back = new_buf + (back - buf);
103 buf = new_buf; 110 buf = new_buf;
104 } 111 }
105 112
106 *back = 0; 113 *back = 0;
144 } 151 }
145 152
146 while (back - body < clen) { 153 while (back - body < clen) {
147 if (back - buf == buf_size - 1) { 154 if (back - buf == buf_size - 1) {
148 char *new_buf; 155 char *new_buf;
149 buf_size *= 2; 156 size_t new_buf_size = buf_size * 2;
150 new_buf = realloc(buf, buf_size); 157 new_buf = realloc(buf, new_buf_size);
151 158 if(!new_buf) {
159 qfprintf(stderr, "Realloc failed while receiving content\n");
160 close(sock);
161 sock = 0;
162 goto done;
163 }
164
165 buf_size = new_buf_size;
152 back = new_buf + (back - buf); 166 back = new_buf + (back - buf);
153 body = new_buf + (body - buf); 167 body = new_buf + (body - buf);
154 s = new_buf + (s - buf); 168 s = new_buf + (s - buf);
155 169
156 buf = new_buf; 170 buf = new_buf;