URI: 
       tacme: fix bufread crash due to typing-point scrolling - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 50ababbd552abfa8ef3b16ccdaea54b58f5c031c
   DIR parent 6400c9f20c3cdab491cd2aec29cfd2ae632d5046
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Tue,  3 Jun 2014 00:16:48 -0400
       
       acme: fix bufread crash due to typing-point scrolling
       
       Acme tracks the most recent typing insertion point and
       tthe home and end keys stop there on their way
       up to the top or down to the bottom of the file.
       That point should be iq1, and it should be adjusted
       properly so that it's always between 0 and t->file->b.nc inclusive.
       (This is all code from an external contributor, years old at this
       point but new since Plan 9.)
       
       Somehow, sometimes iq1 ends up a little beyond b.nc,
       and when passed to textbacknl it crashes acme in bufread.
       I can't see how that can happen but if it does, avoid the crash.
       
       It's tempting to pull the insertion point code out entirely
       but this is a little less invasive and should fix things for now.
       
       TBR=rsc
       https://codereview.appspot.com/107730043
       
       Diffstat:
         M src/cmd/acme/text.c                 |       4 ++++
       
       1 file changed, 4 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c
       t@@ -725,6 +725,10 @@ texttype(Text *t, Rune r)
                case Kend:
                        typecommit(t);
                        if(t->iq1 > t->org+t->fr.nchars) {
       +                        if(t->iq1 > t->file->b.nc) {
       +                                // should not happen, but does. and it will crash textbacknl.
       +                                t->iq1 = t->file->b.nc;
       +                        }
                                q0 = textbacknl(t, t->iq1, 1);
                                textsetorigin(t, q0, TRUE);
                        } else