From b2704da9efa6a4cae8d01157995d16293d70f831 Mon Sep 17 00:00:00 2001
From: Clement <clement.brisset@gmail.com>
Date: Wed, 7 Aug 2019 15:03:01 -0700
Subject: [PATCH] Don't manage _sendData's memory

---
 .../script-engine/src/XMLHttpRequestClass.cpp | 33 ++++++-------------
 .../script-engine/src/XMLHttpRequestClass.h   | 20 +++++------
 2 files changed, 20 insertions(+), 33 deletions(-)

diff --git a/libraries/script-engine/src/XMLHttpRequestClass.cpp b/libraries/script-engine/src/XMLHttpRequestClass.cpp
index 19294710a4..51e3ef0759 100644
--- a/libraries/script-engine/src/XMLHttpRequestClass.cpp
+++ b/libraries/script-engine/src/XMLHttpRequestClass.cpp
@@ -30,30 +30,14 @@ Q_DECLARE_METATYPE(QByteArray*)
 
 XMLHttpRequestClass::XMLHttpRequestClass(QScriptEngine* engine) :
     _engine(engine),
-    _async(true),
-    _url(),
-    _method(""),
-    _responseType(""),
-    _request(),
-    _reply(NULL),
-    _sendData(NULL),
-    _rawResponseData(),
-    _responseData(""),
-    _onTimeout(QScriptValue::NullValue),
-    _onReadyStateChange(QScriptValue::NullValue),
-    _readyState(XMLHttpRequestClass::UNSENT),
-    _errorCode(QNetworkReply::NoError),
-    _timeout(0),
-    _timer(this),
-    _numRedirects(0) {
+    _timer(this) {
 
     _request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
     _timer.setSingleShot(true);
 }
 
 XMLHttpRequestClass::~XMLHttpRequestClass() {
-    if (_reply) { delete _reply; }
-    if (_sendData) { delete _sendData; }
+    if (_reply) { _reply->deleteLater(); }
 }
 
 QScriptValue XMLHttpRequestClass::constructor(QScriptContext* context, QScriptEngine* engine) {
@@ -169,13 +153,12 @@ void XMLHttpRequestClass::send() {
 
 void XMLHttpRequestClass::send(const QScriptValue& data) {
     if (_readyState == OPENED && !_reply) {
+
         if (!data.isNull()) {
-            _sendData = new QBuffer(this);
             if (data.isObject()) {
-                QByteArray ba = qscriptvalue_cast<QByteArray>(data);
-                _sendData->setData(ba);
+                _sendData = qscriptvalue_cast<QByteArray>(data);
             } else {
-                _sendData->setData(data.toString().toUtf8());
+                _sendData = data.toString().toUtf8();
             }
         }
 
@@ -235,6 +218,10 @@ void XMLHttpRequestClass::requestFinished() {
         }
     }
 
+    disconnectFromReply(_reply);
+    _reply->deleteLater();
+    _reply = nullptr;
+
     setReadyState(DONE);
     emit requestComplete();
 }
@@ -246,7 +233,7 @@ void XMLHttpRequestClass::abortRequest() {
         disconnectFromReply(_reply);
         _reply->abort();
         _reply->deleteLater();
-        _reply = NULL;
+        _reply = nullptr;
     }
 }
 
diff --git a/libraries/script-engine/src/XMLHttpRequestClass.h b/libraries/script-engine/src/XMLHttpRequestClass.h
index c79859e895..d7f3c2e059 100644
--- a/libraries/script-engine/src/XMLHttpRequestClass.h
+++ b/libraries/script-engine/src/XMLHttpRequestClass.h
@@ -98,23 +98,23 @@ private:
     void disconnectFromReply(QNetworkReply* reply);
     void abortRequest();
 
-    QScriptEngine* _engine;
-    bool _async;
+    QScriptEngine* _engine { nullptr };
+    bool _async { true };
     QUrl _url;
     QString _method;
     QString _responseType;
     QNetworkRequest _request;
-    QNetworkReply* _reply;
-    QBuffer* _sendData;
+    QNetworkReply* _reply { nullptr };
+    QByteArray _sendData;
     QByteArray _rawResponseData;
     QScriptValue _responseData;
-    QScriptValue _onTimeout;
-    QScriptValue _onReadyStateChange;
-    ReadyState _readyState;
-    QNetworkReply::NetworkError _errorCode;
-    int _timeout;
+    QScriptValue _onTimeout { QScriptValue::NullValue };
+    QScriptValue _onReadyStateChange { QScriptValue::NullValue };
+    ReadyState _readyState { XMLHttpRequestClass::UNSENT };
+    QNetworkReply::NetworkError _errorCode { QNetworkReply::NoError };
+    int _timeout { 0 };
     QTimer _timer;
-    int _numRedirects;
+    int _numRedirects { 0 };
 
 private slots:
     void requestFinished();