From b770ff7b794dfe5aaa24c7cc6f6f6ac12c1660d8 Mon Sep 17 00:00:00 2001 From: Roxanne Skelly Date: Thu, 25 Jul 2019 18:14:11 -0700 Subject: [PATCH] BUGZ-829 - error handling for web uploaded model files --- domain-server/src/DomainServer.cpp | 13 +++++++++---- domain-server/src/DomainServer.h | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp index 44688d0b88..0efa003572 100644 --- a/domain-server/src/DomainServer.cpp +++ b/domain-server/src/DomainServer.cpp @@ -2601,14 +2601,16 @@ bool DomainServer::processPendingContent(HTTPConnection* connection, QString ite } QByteArray& _pendingUploadedContent = _pendingUploadedContents[sessionId]; _pendingUploadedContent += dataChunk; - connection->respond(HTTPConnection::StatusCode200); if (itemName == "restore-file" || itemName == "restore-file-chunk-final" || itemName == "restore-file-chunk-only") { // invoke our method to hand the new octree file off to the octree server - QMetaObject::invokeMethod(this, "handleOctreeFileReplacement", - Qt::QueuedConnection, Q_ARG(QByteArray, _pendingUploadedContent), Q_ARG(QString, filename), Q_ARG(QString, QString())); + if(!handleOctreeFileReplacement(_pendingUploadedContent, filename, QString())) { + connection->respond(HTTPConnection::StatusCode400); + return false; + } _pendingUploadedContents.erase(sessionId); } + connection->respond(HTTPConnection::StatusCode200); } else { connection->respond(HTTPConnection::StatusCode400); return false; @@ -3491,7 +3493,7 @@ void DomainServer::maybeHandleReplacementEntityFile() { } } -void DomainServer::handleOctreeFileReplacement(QByteArray octreeFile, QString sourceFilename, QString name) { +bool DomainServer::handleOctreeFileReplacement(QByteArray octreeFile, QString sourceFilename, QString name) { OctreeUtils::RawEntityData data; if (data.readOctreeDataInfoFromData(octreeFile)) { data.resetIdAndVersion(); @@ -3520,11 +3522,14 @@ void DomainServer::handleOctreeFileReplacement(QByteArray octreeFile, QString so _settingsManager.recurseJSONObjectAndOverwriteSettings(jsonObject, ContentSettings); QMetaObject::invokeMethod(this, "restart", Qt::QueuedConnection); + return true; } else { qWarning() << "Could not write replacement octree data to file - refusing to process"; + return false; } } else { qDebug() << "Received replacement octree file that is invalid - refusing to process"; + return false; } } diff --git a/domain-server/src/DomainServer.h b/domain-server/src/DomainServer.h index 1f28169040..aef59a4e4a 100644 --- a/domain-server/src/DomainServer.h +++ b/domain-server/src/DomainServer.h @@ -99,7 +99,7 @@ private slots: void handleDomainContentReplacementFromURLRequest(QSharedPointer message); void handleOctreeFileReplacementRequest(QSharedPointer message); - void handleOctreeFileReplacement(QByteArray octreeFile, QString sourceFilename, QString name); + bool handleOctreeFileReplacement(QByteArray octreeFile, QString sourceFilename, QString name); void processOctreeDataRequestMessage(QSharedPointer message); void processOctreeDataPersistMessage(QSharedPointer message);