- fixed problem in filename validation of MMS file services (LIB61850-357)

v1.6_develop_rgoose_sntp
Michael Zillgith 3 years ago
parent 795b6cfba8
commit 87cc983da2

@ -573,11 +573,8 @@ mmsMsg_createExtendedFilename(const char* basepath, int bufSize, char* extendedF
bool bool
mmsMsg_isFilenameSave(const char* filename) mmsMsg_isFilenameSave(const char* filename)
{ {
if (filename) { if (filename)
if (filename[0] == '/' || filename[0] == '\\') { {
return false;
}
if (strstr(filename, "..")) if (strstr(filename, ".."))
return false; return false;
@ -641,7 +638,7 @@ mmsMsg_parseFileName(char* filename, uint8_t* buffer, int* bufPos, int maxBufPos
* characters. * characters.
*/ */
if (strstr(filename, "..") != NULL) { if (strstr(filename, "..") != NULL) {
mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILENAME_SYNTAX_ERROR); mmsMsg_createServiceErrorPdu(invokeId, response, MMS_ERROR_FILE_FILE_NON_EXISTENT);
return false; return false;
} }

@ -1048,7 +1048,9 @@ createFileDirectoryResponse(const char* basepath, uint32_t invokeId, ByteBuffer*
continueAfterFileName = NULL; continueAfterFileName = NULL;
} }
if ((mmsMsg_isFilenameSave(directoryName) == false) || (mmsMsg_isFilenameSave(continueAfterFileName) == false)) { if ((directoryName && mmsMsg_isFilenameSave(directoryName) == false) ||
(continueAfterFileName && mmsMsg_isFilenameSave(continueAfterFileName) == false))
{
if (DEBUG_MMS_SERVER) if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: remote provided unsave filename -> rejected\n"); printf("MMS_SERVER: remote provided unsave filename -> rejected\n");

Loading…
Cancel
Save