Blob Blame History Raw
diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp
index 7b5b8f783..3b7fffa80 100644
--- a/Marlin/cardreader.cpp
+++ b/Marlin/cardreader.cpp
@@ -384,9 +384,11 @@ void CardReader::openFile(char* name, const bool read, const bool subcall/*=fals
       //SERIAL_ECHOPGM("start:");SERIAL_ECHOLN((int)(dirname_start - name));
       //SERIAL_ECHOPGM("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
       if (dirname_end != NULL && dirname_end > dirname_start) {
-        char subdirname[FILENAME_LENGTH];
-        strncpy(subdirname, dirname_start, dirname_end - dirname_start);
-        subdirname[dirname_end - dirname_start] = '\0';
+        const int8_t len = dirname_end - dirname_start;
+        if (len <= 0) break;
+        char subdirname[len + 1];
+        strncpy(subdirname, dirname_start, len);
+        subdirname[len] = '\0';
         if (!myDir.open(curDir, subdirname, O_READ)) {
           SERIAL_PROTOCOLPGM(MSG_SD_OPEN_FILE_FAIL);
           SERIAL_PROTOCOL(subdirname);
@@ -458,9 +460,11 @@ void CardReader::removeFile(const char * const name) {
       //SERIAL_ECHOPGM("start:");SERIAL_ECHOLN((int)(dirname_start - name));
       //SERIAL_ECHOPGM("end  :");SERIAL_ECHOLN((int)(dirname_end - name));
       if (dirname_end != NULL && dirname_end > dirname_start) {
-        char subdirname[FILENAME_LENGTH];
-        strncpy(subdirname, dirname_start, dirname_end - dirname_start);
-        subdirname[dirname_end - dirname_start] = 0;
+        const int8_t len = dirname_end - dirname_start;
+        if (len <= 0) break;
+        char subdirname[len + 1];
+        strncpy(subdirname, dirname_start, len);
+        subdirname[len] = 0;
         SERIAL_ECHOLN(subdirname);
         if (!myDir.open(curDir, subdirname, O_READ)) {
           SERIAL_PROTOCOLPAIR(MSG_SD_OPEN_FILE_FAIL, subdirname);