From e2d13d934a19651bb7c06c0212a1b875d8b9be1b Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Mon, 23 Jan 2017 14:35:00 +1100
Subject: [PATCH] extmod/modframebuf: Clip pixels drawn by line method.

---
 extmod/modframebuf.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/extmod/modframebuf.c b/extmod/modframebuf.c
index 93d4922c9..e2441f194 100644
--- a/extmod/modframebuf.c
+++ b/extmod/modframebuf.c
@@ -302,9 +302,13 @@ STATIC mp_obj_t framebuf_line(size_t n_args, const mp_obj_t *args) {
     mp_int_t e = 2 * dy - dx;
     for (mp_int_t i = 0; i < dx; ++i) {
         if (steep) {
-            setpixel(self, y1, x1, col);
+            if (0 <= y1 && y1 < self->width && 0 <= x1 && x1 < self->height) {
+                setpixel(self, y1, x1, col);
+            }
         } else {
-            setpixel(self, x1, y1, col);
+            if (0 <= x1 && x1 < self->width && 0 <= y1 && y1 < self->height) {
+                setpixel(self, x1, y1, col);
+            }
         }
         while (e >= 0) {
             y1 += sy;
@@ -314,7 +318,9 @@ STATIC mp_obj_t framebuf_line(size_t n_args, const mp_obj_t *args) {
         e += 2 * dy;
     }
 
-    setpixel(self, x2, y2, col);
+    if (0 <= x2 && x2 < self->width && 0 <= y2 && y2 < self->height) {
+        setpixel(self, x2, y2, col);
+    }
 
     return mp_const_none;
 }
-- 
GitLab