Fixed buffer overflow in lcd_hlineStip()
This commit is contained in:
@@ -38,7 +38,10 @@
|
||||
|
||||
void lcd_mask(uint8_t *p, uint8_t mask, LcdFlags att)
|
||||
{
|
||||
ASSERT_IN_DISPLAY(p);
|
||||
// ASSERT_IN_DISPLAY(p);
|
||||
if ((p) >= DISPLAY_END) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (att&FILL_WHITE) {
|
||||
// TODO I could remove this, it's used for the top bar
|
||||
@@ -71,7 +74,12 @@ void lcd_plot(coord_t x, coord_t y, LcdFlags att)
|
||||
void lcd_hlineStip(coord_t x, coord_t y, coord_t w, uint8_t pat, LcdFlags att)
|
||||
{
|
||||
if (y >= LCD_H) return;
|
||||
if (x+w > LCD_W) { w = LCD_W - x; }
|
||||
if (x+w > LCD_W) {
|
||||
if (x >= LCD_W ) {
|
||||
return;
|
||||
}
|
||||
w = LCD_W - x;
|
||||
}
|
||||
|
||||
uint8_t *p = &displayBuf[ y / 2 * LCD_W + x ];
|
||||
uint8_t mask = PIXEL_GREY_MASK(y, att);
|
||||
|
||||
@@ -269,3 +269,30 @@ TEST(Lcd, BMPWrapping)
|
||||
EXPECT_TRUE(checkScreenshot("bmpwrapping"));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
TEST(Lcd, lcd_hlineStip)
|
||||
{
|
||||
lcd_clear();
|
||||
lcd_hlineStip(0, 10, LCD_W, DOTTED);
|
||||
lcd_hlineStip(0, 20, LCD_W, SOLID);
|
||||
lcd_hlineStip(50, 30, LCD_W, 0xEE); //too wide
|
||||
lcd_hlineStip(50, LCD_H + 10, 20, SOLID); //too low
|
||||
lcd_hlineStip(250, 30, LCD_W, SOLID); //x outside display
|
||||
EXPECT_TRUE(checkScreenshot("lcd_hlineStip"));
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
TEST(Lcd, lcd_vlineStip)
|
||||
{
|
||||
lcd_clear();
|
||||
lcd_vlineStip(10, 0, LCD_H, DOTTED);
|
||||
lcd_vlineStip(20, 0, LCD_H, SOLID);
|
||||
lcd_vlineStip(30, 30, LCD_H, 0xEE); //too high
|
||||
lcd_vlineStip(40, LCD_H + 10, 20, SOLID); //too low
|
||||
lcd_vlineStip(250, LCD_H + 10, LCD_H, SOLID); //x outside display
|
||||
EXPECT_TRUE(checkScreenshot("lcd_vlineStip"));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user