microbuilder / LPC1343CodeBase

Generic GCC-based library for the ARM Cortex-M3 LPC1343

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

potential buffer overflow in ssd1306 driver

prusnak opened this issue · comments

When display size 128x32 is used (instead of 128x64) then the buffer is not 1024 bytes but half. Patch included:

diff --git a/drivers/displays/bitmap/ssd1306/ssd1306.c b/drivers/displays/bitmap/ssd1306/ssd1306.c
index fd5ac22..6812b34 100644
--- a/drivers/displays/bitmap/ssd1306/ssd1306.c
+++ b/drivers/displays/bitmap/ssd1306/ssd1306.c
@@ -490,7 +490,7 @@ uint8_t ssd1306GetPixel(uint8_t x, uint8_t y)
 /**************************************************************************/
 void ssd1306ClearScreen() 
 {
-  memset(_ssd1306buffer, 0x00, 1024);
+  memset(_ssd1306buffer, 0x00, sizeof(_ssd1306buffer));
 }

 /**************************************************************************/
@@ -506,7 +506,7 @@ void ssd1306Refresh(void)
     CMD(SSD1306_SETSTARTLINE | 0x0); // line #0

     uint16_t i;
-    for (i=0; i<1024; i++) 
+    for (i = 0; i < sizeof(_ssd1306buffer); i++)
     {
       DATA(_ssd1306buffer[i]);
     }
@@ -518,7 +518,7 @@ void ssd1306Refresh(void)
     ssd1306SendCommand(SSD1306_SETSTARTLINE | 0x0); // line #0

     uint16_t i;
-    for (i=0; i<1024; i++) 
+    for (i = 0; i < sizeof(_ssd1306buffer); i++)
     {
       ssd1306SendData(_ssd1306buffer[i]);
     }

You're right ... thanks for the reminder, changes committed.