Skip to content

Commit ead44bd

Browse files
committed
fix(mem): abort request on failed allocations
1 parent f992f2d commit ead44bd

31 files changed

+153
-66
lines changed

examples/Auth/Auth.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,6 @@ void setup() {
152152
}
153153

154154
// not needed
155-
void loop() {}
155+
void loop() {
156+
delay(100);
157+
}

examples/CORS/CORS.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,6 @@ void setup() {
5555
}
5656

5757
// not needed
58-
void loop() {}
58+
void loop() {
59+
delay(100);
60+
}

examples/CatchAllHandler/CatchAllHandler.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -128,4 +128,6 @@ void setup() {
128128
}
129129

130130
// not needed
131-
void loop() {}
131+
void loop() {
132+
delay(100);
133+
}

examples/ChunkResponse/ChunkResponse.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -135,4 +135,6 @@ void setup() {
135135
server.begin();
136136
}
137137

138-
void loop() {}
138+
void loop() {
139+
delay(100);
140+
}

examples/EndBegin/EndBegin.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,6 @@ void setup() {
4444
}
4545

4646
// not needed
47-
void loop() {}
47+
void loop() {
48+
delay(100);
49+
}

examples/Filters/Filters.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,6 @@ void setup() {
131131
// ESP.restart();
132132
}
133133

134-
void loop() {}
134+
void loop() {
135+
delay(100);
136+
}

examples/FlashResponse/FlashResponse.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,6 @@ void setup() {
102102
}
103103

104104
// not needed
105-
void loop() {}
105+
void loop() {
106+
delay(100);
107+
}

examples/HeaderManipulation/HeaderManipulation.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,6 @@ void setup() {
8383
}
8484

8585
// not needed
86-
void loop() {}
86+
void loop() {
87+
delay(100);
88+
}

examples/Json/Json.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,6 @@ void setup() {
8585
}
8686

8787
// not needed
88-
void loop() {}
88+
void loop() {
89+
delay(100);
90+
}

examples/Logging/Logging.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,6 @@ void setup() {
4444
}
4545

4646
// not needed
47-
void loop() {}
47+
void loop() {
48+
delay(100);
49+
}

examples/MessagePack/MessagePack.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,6 @@ void setup() {
8383
}
8484

8585
// not needed
86-
void loop() {}
86+
void loop() {
87+
delay(100);
88+
}

examples/Middleware/Middleware.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -77,4 +77,6 @@ void setup() {
7777
}
7878

7979
// not needed
80-
void loop() {}
80+
void loop() {
81+
delay(100);
82+
}

examples/Params/Params.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,6 @@ void setup() {
117117
}
118118

119119
// not needed
120-
void loop() {}
120+
void loop() {
121+
delay(100);
122+
}

examples/RateLimit/RateLimit.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,6 @@ void setup() {
5959
}
6060

6161
// not needed
62-
void loop() {}
62+
void loop() {
63+
delay(100);
64+
}

examples/Redirect/Redirect.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,6 @@ void setup() {
4343
}
4444

4545
// not needed
46-
void loop() {}
46+
void loop() {
47+
delay(100);
48+
}

examples/ResumableDownload/ResumableDownload.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,6 @@ void setup() {
5656
server.begin();
5757
}
5858

59-
void loop() {}
59+
void loop() {
60+
delay(100);
61+
}

examples/Rewrite/Rewrite.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,6 @@ void setup() {
4747
}
4848

4949
// not needed
50-
void loop() {}
50+
void loop() {
51+
delay(100);
52+
}

examples/SkipServerMiddleware/SkipServerMiddleware.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,6 @@ void setup() {
6868
}
6969

7070
// not needed
71-
void loop() {}
71+
void loop() {
72+
delay(100);
73+
}

examples/StaticFile/StaticFile.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,6 @@ void setup() {
117117
}
118118

119119
// not needed
120-
void loop() {}
120+
void loop() {
121+
delay(100);
122+
}

examples/Templates/Templates.ino

+3-1
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,6 @@ void setup() {
9494
}
9595

9696
// not needed
97-
void loop() {}
97+
void loop() {
98+
delay(100);
99+
}

src/AsyncEventSource.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static String generateEventMessage(const char *message, const char *event, uint3
2626

2727
if (!str.reserve(len)) {
2828
#ifdef ESP32
29-
log_e("Failed to allocate buffer");
29+
log_e("Failed to allocate");
3030
#endif
3131
return emptyString;
3232
}
@@ -358,6 +358,12 @@ void AsyncEventSourceClient::set_max_inflight_bytes(size_t value) {
358358

359359
void AsyncEventSource::authorizeConnect(ArAuthorizeConnectHandler cb) {
360360
AsyncAuthorizationMiddleware *m = new AsyncAuthorizationMiddleware(401, cb);
361+
if (!m) {
362+
#ifdef ESP32
363+
log_e("Failed to allocate");
364+
#endif
365+
return;
366+
}
361367
m->_freeOnRemoval = true;
362368
addMiddleware(m);
363369
}

src/AsyncJson.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,9 @@ void AsyncCallbackJsonWebHandler::handleBody(AsyncWebServerRequest *request, uin
152152
request->_tempObject = malloc(total);
153153
if (request->_tempObject == NULL) {
154154
#ifdef ESP32
155-
log_e("Failed to allocate buffer");
155+
log_e("Failed to allocate");
156156
#endif
157+
request->abort();
157158
return;
158159
}
159160
}

src/AsyncMessagePack.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,9 @@ void AsyncCallbackMessagePackWebHandler::handleBody(AsyncWebServerRequest *reque
104104
request->_tempObject = malloc(total);
105105
if (request->_tempObject == NULL) {
106106
#ifdef ESP32
107-
log_e("Failed to allocate buffer");
107+
log_e("Failed to allocate");
108108
#endif
109+
request->abort();
109110
return;
110111
}
111112
}

src/AsyncWebHeader.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ String AsyncWebHeader::toString() const {
2525
str.concat(asyncsrv::T_rn);
2626
} else {
2727
#ifdef ESP32
28-
log_e("Failed to allocate buffer");
28+
log_e("Failed to allocate");
2929
#endif
3030
}
3131
return str;

src/AsyncWebSocket.cpp

+15-18
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,9 @@ size_t webSocketSendFrame(AsyncClient *client, bool final, uint8_t opcode, bool
6767
uint8_t *buf = (uint8_t *)malloc(headLen);
6868
if (buf == NULL) {
6969
#ifdef ESP32
70-
log_e("Failed to allocate buffer");
70+
log_e("Failed to allocate");
7171
#endif
72+
client->abort();
7273
return 0;
7374
}
7475

@@ -170,7 +171,7 @@ class AsyncWebSocketControl {
170171

171172
if (_data == NULL) {
172173
#ifdef ESP32
173-
log_e("Failed to allocate buffer");
174+
log_e("Failed to allocate");
174175
#endif
175176
_len = 0;
176177
} else {
@@ -522,7 +523,8 @@ void AsyncWebSocketClient::close(uint16_t code, const char *message) {
522523
return;
523524
} else {
524525
#ifdef ESP32
525-
log_e("Failed to allocate buffer");
526+
log_e("Failed to allocate");
527+
_client->abort();
526528
#endif
527529
}
528530
}
@@ -1252,6 +1254,13 @@ void AsyncWebSocket::handleRequest(AsyncWebServerRequest *request) {
12521254
}
12531255
const AsyncWebHeader *key = request->getHeader(WS_STR_KEY);
12541256
AsyncWebServerResponse *response = new AsyncWebSocketResponse(key->value(), this);
1257+
if (response == NULL) {
1258+
#ifdef ESP32
1259+
log_e("Failed to allocate");
1260+
#endif
1261+
request->abort();
1262+
return;
1263+
}
12551264
if (request->hasHeader(WS_STR_PROTOCOL)) {
12561265
const AsyncWebHeader *protocol = request->getHeader(WS_STR_PROTOCOL);
12571266
// ToDo: check protocol
@@ -1261,23 +1270,11 @@ void AsyncWebSocket::handleRequest(AsyncWebServerRequest *request) {
12611270
}
12621271

12631272
AsyncWebSocketMessageBuffer *AsyncWebSocket::makeBuffer(size_t size) {
1264-
AsyncWebSocketMessageBuffer *buffer = new AsyncWebSocketMessageBuffer(size);
1265-
if (buffer->length() != size) {
1266-
delete buffer;
1267-
return nullptr;
1268-
} else {
1269-
return buffer;
1270-
}
1273+
return new AsyncWebSocketMessageBuffer(size);
12711274
}
12721275

12731276
AsyncWebSocketMessageBuffer *AsyncWebSocket::makeBuffer(const uint8_t *data, size_t size) {
1274-
AsyncWebSocketMessageBuffer *buffer = new AsyncWebSocketMessageBuffer(data, size);
1275-
if (buffer->length() != size) {
1276-
delete buffer;
1277-
return nullptr;
1278-
} else {
1279-
return buffer;
1280-
}
1277+
return new AsyncWebSocketMessageBuffer(data, size);
12811278
}
12821279

12831280
/*
@@ -1298,7 +1295,7 @@ AsyncWebSocketResponse::AsyncWebSocketResponse(const String &key, AsyncWebSocket
12981295
#else
12991296
String k;
13001297
if (!k.reserve(key.length() + WS_STR_UUID_LEN)) {
1301-
log_e("Failed to allocate buffer");
1298+
log_e("Failed to allocate");
13021299
return;
13031300
}
13041301
k.concat(key);

src/Middleware.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ AsyncMiddlewareChain::~AsyncMiddlewareChain() {
1414

1515
void AsyncMiddlewareChain::addMiddleware(ArMiddlewareCallback fn) {
1616
AsyncMiddlewareFunction *m = new AsyncMiddlewareFunction(fn);
17+
if (!m) {
18+
#ifdef ESP32
19+
log_e("Failed to allocate");
20+
#endif
21+
return;
22+
}
1723
m->_freeOnRemoval = true;
1824
_middlewares.emplace_back(m);
1925
}

src/WebAuthentication.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ String genRandomMD5() {
8787
char *out = (char *)malloc(33);
8888
if (out == NULL || !getMD5((uint8_t *)(&r), 4, out)) {
8989
#ifdef ESP32
90-
log_e("Failed to allocate buffer");
90+
log_e("Failed to allocate");
9191
#endif
9292
return emptyString;
9393
}
@@ -100,7 +100,7 @@ static String stringMD5(const String &in) {
100100
char *out = (char *)malloc(33);
101101
if (out == NULL || !getMD5((uint8_t *)(in.c_str()), in.length(), out)) {
102102
#ifdef ESP32
103-
log_e("Failed to allocate buffer");
103+
log_e("Failed to allocate");
104104
#endif
105105
return emptyString;
106106
}
@@ -116,15 +116,15 @@ String generateDigestHash(const char *username, const char *password, const char
116116
char *out = (char *)malloc(33);
117117
if (out == NULL) {
118118
#ifdef ESP32
119-
log_e("Failed to allocate buffer");
119+
log_e("Failed to allocate");
120120
#endif
121121
return emptyString;
122122
}
123123

124124
String in;
125125
if (!in.reserve(strlen(username) + strlen(realm) + strlen(password) + 2)) {
126126
#ifdef ESP32
127-
log_e("Failed to allocate buffer");
127+
log_e("Failed to allocate");
128128
#endif
129129
free(out);
130130
return emptyString;
@@ -138,7 +138,7 @@ String generateDigestHash(const char *username, const char *password, const char
138138

139139
if (!getMD5((uint8_t *)(in.c_str()), in.length(), out)) {
140140
#ifdef ESP32
141-
log_e("Failed to allocate buffer");
141+
log_e("Failed to allocate");
142142
#endif
143143
free(out);
144144
return emptyString;

src/WebHandlers.cpp

+16-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ AsyncWebHandler &AsyncWebHandler::setFilter(ArRequestFilterFunction fn) {
1313
AsyncWebHandler &AsyncWebHandler::setAuthentication(const char *username, const char *password, AsyncAuthType authMethod) {
1414
if (!_authMiddleware) {
1515
_authMiddleware = new AsyncAuthenticationMiddleware();
16+
if (!_authMiddleware) {
17+
#ifdef ESP32
18+
log_e("Failed to allocate");
19+
#endif
20+
return *this;
21+
}
1622
_authMiddleware->_freeOnRemoval = true;
1723
addMiddleware(_authMiddleware);
1824
}
@@ -174,8 +180,9 @@ bool AsyncStaticWebHandler::_searchFile(AsyncWebServerRequest *request, const St
174180
char *_tempPath = (char *)malloc(pathLen + 1);
175181
if (_tempPath == NULL) {
176182
#ifdef ESP32
177-
log_e("Failed to allocate buffer");
183+
log_e("Failed to allocate");
178184
#endif
185+
request->abort();
179186
request->_tempFile.close();
180187
return false;
181188
}
@@ -242,6 +249,14 @@ void AsyncStaticWebHandler::handleRequest(AsyncWebServerRequest *request) {
242249
response = new AsyncFileResponse(request->_tempFile, filename, emptyString, false, _callback);
243250
}
244251

252+
if (!response) {
253+
#ifdef ESP32
254+
log_e("Failed to allocate");
255+
#endif
256+
request->abort();
257+
return;
258+
}
259+
245260
response->addHeader(T_ETag, etag.c_str());
246261

247262
if (_last_modified.length()) {

0 commit comments

Comments
 (0)