Fix inadvertent O(N^2) loop within do_paint() which I just
[u/mdw/putty] / terminal.c
index db61a1a..72ff9f9 100644 (file)
@@ -4822,10 +4822,12 @@ static void do_paint(Terminal *term, Context ctx, int may_optimise)
                != newline[j].attr) {
                int k;
 
-               for (k = laststart; k < j; k++)
-                   term->disptext[i]->chars[k].attr |= ATTR_INVALID;
+               if (!dirtyrect) {
+                   for (k = laststart; k < j; k++)
+                       term->disptext[i]->chars[k].attr |= ATTR_INVALID;
 
-               dirtyrect = TRUE;
+                   dirtyrect = TRUE;
+               }
            }
 
            if (dirtyrect)