summaryrefslogtreecommitdiffstats
path: root/src/gui/text/qfragmentmap_p.h
diff options
context:
space:
mode:
authorJiang Jiang <jiang.jiang@nokia.com>2011-04-08 15:34:51 (GMT)
committerJiang Jiang <jiang.jiang@nokia.com>2011-04-11 08:44:39 (GMT)
commitb033bb91ea6fd32989cc59904aa79db9a188bf5b (patch)
tree9d8fafe53ed61130c07afb98546dfe1a9b3de49f /src/gui/text/qfragmentmap_p.h
parent32372616ed942685c7367d6aee58a7fd3849cc0b (diff)
downloadQt-b033bb91ea6fd32989cc59904aa79db9a188bf5b.zip
Qt-b033bb91ea6fd32989cc59904aa79db9a188bf5b.tar.gz
Qt-b033bb91ea6fd32989cc59904aa79db9a188bf5b.tar.bz2
Make sure removed QTextBlock is invalid
If the block is removed from document block map, we will mark the right node to the current head->freelist index, but it shouldn't be accessed directly, otherwise it can cause crash because of uninitialized node. Hence we need to check if a node index is equal to current freelist index. If so, it cannot be a valid block. Task-number: QTBUG-18500 Reviewed-by: Eskil
Diffstat (limited to 'src/gui/text/qfragmentmap_p.h')
-rw-r--r--src/gui/text/qfragmentmap_p.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/gui/text/qfragmentmap_p.h b/src/gui/text/qfragmentmap_p.h
index 501bfff..4057142 100644
--- a/src/gui/text/qfragmentmap_p.h
+++ b/src/gui/text/qfragmentmap_p.h
@@ -195,6 +195,10 @@ public:
head->root = new_root;
}
+ inline bool isValid(uint n) const {
+ return n > 0 && n != head->freelist;
+ }
+
union {
Header *head;
Fragment *fragments;
@@ -854,6 +858,7 @@ public:
return data.fragment(index);
}
inline uint position(uint node, uint field = 0) const { return data.position(node, field); }
+ inline bool isValid(uint n) const { return data.isValid(n); }
inline uint next(uint n) const { return data.next(n); }
inline uint previous(uint n) const { return data.previous(n); }
inline uint size(uint node, uint field = 0) const { return data.size(node, field); }