From 53fb739f85f89c2b2b94f50ecac476270867c1ee Mon Sep 17 00:00:00 2001 From: Zain Wang Date: Fri, 18 Sep 2020 17:30:07 +0800 Subject: [PATCH] MtpServer: fix doMoveFile with wrong newFilePath Signed-off-by: Zain Wang --- src/MtpServer.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/MtpServer.cpp b/src/MtpServer.cpp index ba95c5a..fb73ac3 100644 --- a/src/MtpServer.cpp +++ b/src/MtpServer.cpp @@ -1190,14 +1190,31 @@ MtpResponseCode MtpServer::doMoveObject() { if (!hasStorage()) return MTP_RESPONSE_INVALID_OBJECT_HANDLE; MtpObjectHandle handle = mRequest.getParameter(1); - MtpObjectFormat format = mRequest.getParameter(2); + MtpStorageID id = mRequest.getParameter(2); MtpObjectHandle newparent = mRequest.getParameter(3); + MtpObjectFormat format; MtpString filePath; MtpString newPath; int64_t fileLength; int result = mDatabase->getObjectFilePath(handle, filePath, fileLength, format); - result = mDatabase->getObjectFilePath(handle, newPath, fileLength, format); + + if (newparent == 0) + newPath = getStorage(id)->getPath(); + else + result = mDatabase->getObjectFilePath(newparent, newPath, fileLength, format); + + if (newPath.at(newPath.size() - 1) != '/') + newPath.append("/"); + + + for (int i = filePath.size() - 2; i >= 0; i--) { + if (filePath.at(i) == '/') { + newPath.append(&filePath.c_str()[i + 1]); + break; + } + } + if (result == MTP_RESPONSE_OK) { VLOG(2) << "moving " << filePath.c_str() << " to " << newPath.c_str(); result = mDatabase->moveFile(handle, newparent); -- 2.17.1