Browse Source

[2.0.x] Memory overflow protection (#9562)

GMagician 7 years ago
parent
commit
299606e4ae
1 changed files with 4 additions and 4 deletions
  1. 4
    4
      Marlin/src/lcd/ultralcd.cpp

+ 4
- 4
Marlin/src/lcd/ultralcd.cpp View File

92
         lcd_status_message_level;    // Higher level blocks lower level
92
         lcd_status_message_level;    // Higher level blocks lower level
93
 
93
 
94
 #if ENABLED(STATUS_MESSAGE_SCROLLING)
94
 #if ENABLED(STATUS_MESSAGE_SCROLLING)
95
-  #define MAX_MESSAGE_LENGTH max(2 * CHARSIZE * LCD_WIDTH, LONG_FILENAME_LENGTH)
95
+  #define MAX_MESSAGE_LENGTH max(CHARSIZE * 2 * (LCD_WIDTH), LONG_FILENAME_LENGTH)
96
   uint8_t status_scroll_pos = 0;
96
   uint8_t status_scroll_pos = 0;
97
 #else
97
 #else
98
   #define MAX_MESSAGE_LENGTH CHARSIZE * (LCD_WIDTH)
98
   #define MAX_MESSAGE_LENGTH CHARSIZE * (LCD_WIDTH)
5218
 
5218
 
5219
 void lcd_setstatus(const char * const message, const bool persist) {
5219
 void lcd_setstatus(const char * const message, const bool persist) {
5220
   if (lcd_status_message_level > 0) return;
5220
   if (lcd_status_message_level > 0) return;
5221
-  strncpy(lcd_status_message, message, 3 * (LCD_WIDTH));
5221
+  strncpy(lcd_status_message, message, COUNT(lcd_status_message) - 1);
5222
   lcd_finishstatus(persist);
5222
   lcd_finishstatus(persist);
5223
 }
5223
 }
5224
 
5224
 
5226
   if (level < 0) level = lcd_status_message_level = 0;
5226
   if (level < 0) level = lcd_status_message_level = 0;
5227
   if (level < lcd_status_message_level) return;
5227
   if (level < lcd_status_message_level) return;
5228
   lcd_status_message_level = level;
5228
   lcd_status_message_level = level;
5229
-  strncpy_P(lcd_status_message, message, 3 * (LCD_WIDTH));
5229
+  strncpy_P(lcd_status_message, message, COUNT(lcd_status_message) - 1);
5230
   lcd_finishstatus(level > 0);
5230
   lcd_finishstatus(level > 0);
5231
 }
5231
 }
5232
 
5232
 
5235
   lcd_status_message_level = level;
5235
   lcd_status_message_level = level;
5236
   va_list args;
5236
   va_list args;
5237
   va_start(args, fmt);
5237
   va_start(args, fmt);
5238
-  vsnprintf_P(lcd_status_message, 3 * (LCD_WIDTH), fmt, args);
5238
+  vsnprintf_P(lcd_status_message, COUNT(lcd_status_message) - 1, fmt, args);
5239
   va_end(args);
5239
   va_end(args);
5240
   lcd_finishstatus(level > 0);
5240
   lcd_finishstatus(level > 0);
5241
 }
5241
 }

Loading…
Cancel
Save