@@ -135,12 +135,21 @@ AsyncWebSocketMessageBuffer::AsyncWebSocketMessageBuffer()
135
135
AsyncWebSocketMessageBuffer::AsyncWebSocketMessageBuffer (uint8_t * data, size_t size)
136
136
: _buffer(std::make_shared<std::vector<uint8_t >>(size))
137
137
{
138
- std::memcpy (_buffer->data (), data, size);
138
+ if (_buffer->capacity () < size) {
139
+ _buffer.reset ();
140
+ _buffer = std::make_shared<std::vector<uint8_t >>(0 );
141
+ } else {
142
+ std::memcpy (_buffer->data (), data, size);
143
+ }
139
144
}
140
145
141
146
AsyncWebSocketMessageBuffer::AsyncWebSocketMessageBuffer (size_t size)
142
147
: _buffer(std::make_shared<std::vector<uint8_t >>(size))
143
148
{
149
+ if (_buffer->capacity () < size) {
150
+ _buffer.reset ();
151
+ _buffer = std::make_shared<std::vector<uint8_t >>(0 );
152
+ }
144
153
}
145
154
146
155
AsyncWebSocketMessageBuffer::~AsyncWebSocketMessageBuffer ()
@@ -443,6 +452,9 @@ void AsyncWebSocketClient::_queueMessage(std::shared_ptr<std::vector<uint8_t>> b
443
452
if (!_client)
444
453
return ;
445
454
455
+ if (buffer->size () == 0 )
456
+ return ;
457
+
446
458
{
447
459
AsyncWebLockGuard l (_lock);
448
460
if (_messageQueue.size () >= WS_MAX_QUEUED_MESSAGES)
@@ -687,8 +699,10 @@ std::shared_ptr<std::vector<uint8_t>> makeSharedBuffer(const uint8_t *message, s
687
699
688
700
void AsyncWebSocketClient::text (AsyncWebSocketMessageBuffer * buffer)
689
701
{
690
- text (std::move (buffer->_buffer ));
691
- delete buffer;
702
+ if (buffer) {
703
+ text (std::move (buffer->_buffer ));
704
+ delete buffer;
705
+ }
692
706
}
693
707
694
708
void AsyncWebSocketClient::text (std::shared_ptr<std::vector<uint8_t >> buffer)
@@ -739,8 +753,10 @@ void AsyncWebSocketClient::text(const __FlashStringHelper *data)
739
753
740
754
void AsyncWebSocketClient::binary (AsyncWebSocketMessageBuffer * buffer)
741
755
{
742
- binary (std::move (buffer->_buffer ));
743
- delete buffer;
756
+ if (buffer) {
757
+ binary (std::move (buffer->_buffer ));
758
+ delete buffer;
759
+ }
744
760
}
745
761
746
762
void AsyncWebSocketClient::binary (std::shared_ptr<std::vector<uint8_t >> buffer)
@@ -936,8 +952,10 @@ void AsyncWebSocket::text(uint32_t id, const __FlashStringHelper *data)
936
952
937
953
void AsyncWebSocket::textAll (AsyncWebSocketMessageBuffer * buffer)
938
954
{
939
- textAll (std::move (buffer->_buffer ));
940
- delete buffer;
955
+ if (buffer) {
956
+ textAll (std::move (buffer->_buffer ));
957
+ delete buffer;
958
+ }
941
959
}
942
960
943
961
void AsyncWebSocket::textAll (std::shared_ptr<std::vector<uint8_t >> buffer)
@@ -1014,8 +1032,10 @@ void AsyncWebSocket::binary(uint32_t id, const __FlashStringHelper *data, size_t
1014
1032
1015
1033
void AsyncWebSocket::binaryAll (AsyncWebSocketMessageBuffer * buffer)
1016
1034
{
1017
- binaryAll (std::move (buffer->_buffer ));
1018
- delete buffer;
1035
+ if (buffer) {
1036
+ binaryAll (std::move (buffer->_buffer ));
1037
+ delete buffer;
1038
+ }
1019
1039
}
1020
1040
1021
1041
void AsyncWebSocket::binaryAll (std::shared_ptr<std::vector<uint8_t >> buffer)
@@ -1200,12 +1220,26 @@ void AsyncWebSocket::handleRequest(AsyncWebServerRequest *request)
1200
1220
1201
1221
AsyncWebSocketMessageBuffer * AsyncWebSocket::makeBuffer (size_t size)
1202
1222
{
1203
- return new AsyncWebSocketMessageBuffer (size);
1223
+ AsyncWebSocketMessageBuffer * buffer = new AsyncWebSocketMessageBuffer (size);
1224
+ if (buffer->length () != size)
1225
+ {
1226
+ delete buffer;
1227
+ return nullptr ;
1228
+ } else {
1229
+ return buffer;
1230
+ }
1204
1231
}
1205
1232
1206
1233
AsyncWebSocketMessageBuffer * AsyncWebSocket::makeBuffer (uint8_t * data, size_t size)
1207
1234
{
1208
- return new AsyncWebSocketMessageBuffer (data, size);
1235
+ AsyncWebSocketMessageBuffer * buffer = new AsyncWebSocketMessageBuffer (data, size);
1236
+ if (buffer->length () != size)
1237
+ {
1238
+ delete buffer;
1239
+ return nullptr ;
1240
+ } else {
1241
+ return buffer;
1242
+ }
1209
1243
}
1210
1244
1211
1245
/*
0 commit comments