[PYGRUB] Fix a few bounds violations in pygrub's command-line editor.
authorTim Deegan <Tim.Deegan@xensource.com>
Thu, 9 Nov 2006 14:23:24 +0000 (14:23 +0000)
committerTim Deegan <Tim.Deegan@xensource.com>
Thu, 9 Nov 2006 14:23:24 +0000 (14:23 +0000)
Don't step off the end of the line, or delete characters that aren't there.

Signed-off-by: Ryan Harper <ryanh@us.ibm.com>
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
tools/pygrub/src/pygrub

index 1f63e6e2f2349edcb263daa21d62cc7b5b38b762..64a3662704fe4731fb75ca21108c1697e8b6d478 100644 (file)
@@ -113,17 +113,21 @@ class GrubLineEditor(curses.textpad.Textbox):
         elif ch == curses.ascii.SOH:  # ^a
             self.pos = 0
         elif ch in (curses.ascii.STX,curses.KEY_LEFT):
-            self.pos -= 1
+            if self.pos > 0:
+                self.pos -= 1
         elif ch in (curses.ascii.BS,curses.KEY_BACKSPACE):
             if self.pos > 0:
                 self.pos -= 1
-                self.line.pop(self.pos)
+                if self.pos < len(self.line):
+                    self.line.pop(self.pos)
         elif ch == curses.ascii.EOT:                           # ^d
-            self.line.pop(self.pos)
+            if self.pos < len(self.line):
+                self.line.pop(self.pos)
         elif ch == curses.ascii.ENQ:                           # ^e
             self.pos = len(self.line)
         elif ch in (curses.ascii.ACK, curses.KEY_RIGHT):
-            self.pos +=1
+            if self.pos < len(self.line):
+                self.pos +=1
         elif ch == curses.ascii.VT:                            # ^k
             self.line = self.line[:self.pos]
         else: