1From 53fb739f85f89c2b2b94f50ecac476270867c1ee Mon Sep 17 00:00:00 2001 2From: Zain Wang <wzz@rock-chips.com> 3Date: Fri, 18 Sep 2020 17:30:07 +0800 4Subject: [PATCH] MtpServer: fix doMoveFile with wrong newFilePath 5 6Signed-off-by: Zain Wang <wzz@rock-chips.com> 7--- 8 src/MtpServer.cpp | 21 +++++++++++++++++++-- 9 1 file changed, 19 insertions(+), 2 deletions(-) 10 11diff --git a/src/MtpServer.cpp b/src/MtpServer.cpp 12index ba95c5a..fb73ac3 100644 13--- a/src/MtpServer.cpp 14+++ b/src/MtpServer.cpp 15@@ -1190,14 +1190,31 @@ MtpResponseCode MtpServer::doMoveObject() { 16 if (!hasStorage()) 17 return MTP_RESPONSE_INVALID_OBJECT_HANDLE; 18 MtpObjectHandle handle = mRequest.getParameter(1); 19- MtpObjectFormat format = mRequest.getParameter(2); 20+ MtpStorageID id = mRequest.getParameter(2); 21 MtpObjectHandle newparent = mRequest.getParameter(3); 22+ MtpObjectFormat format; 23 24 MtpString filePath; 25 MtpString newPath; 26 int64_t fileLength; 27 int result = mDatabase->getObjectFilePath(handle, filePath, fileLength, format); 28- result = mDatabase->getObjectFilePath(handle, newPath, fileLength, format); 29+ 30+ if (newparent == 0) 31+ newPath = getStorage(id)->getPath(); 32+ else 33+ result = mDatabase->getObjectFilePath(newparent, newPath, fileLength, format); 34+ 35+ if (newPath.at(newPath.size() - 1) != '/') 36+ newPath.append("/"); 37+ 38+ 39+ for (int i = filePath.size() - 2; i >= 0; i--) { 40+ if (filePath.at(i) == '/') { 41+ newPath.append(&filePath.c_str()[i + 1]); 42+ break; 43+ } 44+ } 45+ 46 if (result == MTP_RESPONSE_OK) { 47 VLOG(2) << "moving " << filePath.c_str() << " to " << newPath.c_str(); 48 result = mDatabase->moveFile(handle, newparent); 49-- 502.17.1 51 52