Skip to content

Commit e5d7c10

Browse files
committed
Make WebSocketFrame responsible for memory it references
1 parent b59c8df commit e5d7c10

1 file changed

Lines changed: 4 additions & 5 deletions

File tree

src/websocket.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,9 @@ WebSocketFrame::getDataLength() {
4646

4747
void
4848
WebSocketFrame::setData(const char* data, unsigned int len) {
49-
mData = data;
49+
mData = (char*) malloc(len);
5050
mDataLength = len;
51+
memcpy((void*) mData, data, len);
5152
}
5253

5354
string
@@ -153,12 +154,9 @@ WebSocketParser::getNextFrame() {
153154
char* pos = (char*) memmem(mData, mLength, "\r\n\r\n", 4);
154155

155156
if (pos) {
156-
char* data = (char*) malloc(pos - mData);
157-
memcpy(data, mData, pos - mData);
158-
159157
WebSocketFrame* frame = new WebSocketFrame(0, UNKNOWN);
160158
frame->setSubject("HEADER");
161-
frame->setData(data, pos - mData);
159+
frame->setData(mData, pos - mData);
162160

163161
unsigned int len = pos - mData + 4;
164162

@@ -214,6 +212,7 @@ WebSocketParser::getNextFrame() {
214212
memcpy(payload, mData + payloadHeaderLength, payloadLength);
215213
frame->setData(payload, payloadLength);
216214
mLength -= payloadHeaderLength + payloadLength;
215+
free(payload);
217216

218217
if (mLength > 0) {
219218
memmove(mData, mData + payloadHeaderLength + payloadLength, mLength);

0 commit comments

Comments
 (0)