[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kate] part/undo: fix crash due to index-out-of bounds in bit-array
From:       Dominik Haumann <dhdev () gmx ! de>
Date:       2011-09-04 18:16:16
Message-ID: 20110904181616.6A4A9A607A () git ! kde ! org
[Download RAW message or body]

Git commit b91db4deebb2a1aa2a59845fd94e71a3fe3e5ce1 by Dominik Haumann.
Committed on 04/09/2011 at 20:13.
Pushed by dhaumann into branch 'master'.

fix crash due to index-out-of bounds in bit-array

M  +32   -0    part/undo/kateundo.cpp

http://commits.kde.org/kate/b91db4deebb2a1aa2a59845fd94e71a3fe3e5ce1

diff --git a/part/undo/kateundo.cpp b/part/undo/kateundo.cpp
index 4813049..22a5370 100644
--- a/part/undo/kateundo.cpp
+++ b/part/undo/kateundo.cpp
@@ -381,6 +381,10 @@ void KateEditMarkLineAutoWrappedUndo::redo ()
 
 void KateEditInsertTextUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line >= lines.size()) {
+    lines.resize(m_line + 1);
+  }
+
   if (!lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -391,6 +395,10 @@ void KateEditInsertTextUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditInsertTextUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line >= lines.size()) {
+    lines.resize(m_line + 1);
+  }
+
   if (!lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -401,6 +409,10 @@ void KateEditInsertTextUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditRemoveTextUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line >= lines.size()) {
+    lines.resize(m_line + 1);
+  }
+
   if (!lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -411,6 +423,10 @@ void KateEditRemoveTextUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditRemoveTextUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line >= lines.size()) {
+    lines.resize(m_line + 1);
+  }
+
   if (!lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -421,6 +437,10 @@ void KateEditRemoveTextUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditWrapLineUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line + 1 >= lines.size()) {
+    lines.resize(m_line + 2);
+  }
+
   if (isFlagSet(RedoLine1Modified) && !lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -438,6 +458,10 @@ void KateEditWrapLineUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditWrapLineUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line >= lines.size()) {
+    lines.resize(m_line + 1);
+  }
+
   if (isFlagSet(UndoLine1Modified) && !lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -448,6 +472,10 @@ void KateEditWrapLineUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditUnWrapLineUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line >= lines.size()) {
+    lines.resize(m_line + 1);
+  }
+
   if (isFlagSet(RedoLine1Modified) && !lines.testBit(m_line)) {
     lines.setBit(m_line);
 
@@ -458,6 +486,10 @@ void KateEditUnWrapLineUndo::updateRedoSavedOnDiskFlag(QBitArray & lines)
 
 void KateEditUnWrapLineUndo::updateUndoSavedOnDiskFlag(QBitArray & lines)
 {
+  if (m_line + 1 >= lines.size()) {
+    lines.resize(m_line + 2);
+  }
+
   if (isFlagSet(UndoLine1Modified) && !lines.testBit(m_line)) {
     lines.setBit(m_line);
 

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic