mirror of
https://github.com/helix-editor/helix.git
synced 2024-11-24 10:26:18 +04:00
fix UB in diff gutter (#7227)
This commit is contained in:
parent
d511122279
commit
de0ef8af15
@ -20,8 +20,8 @@
|
||||
/// A cache that stores the `lines` of a rope as a vector.
|
||||
/// It allows safely reusing the allocation of the vec when updating the rope
|
||||
pub(crate) struct InternedRopeLines {
|
||||
diff_base: Rope,
|
||||
doc: Rope,
|
||||
diff_base: Box<Rope>,
|
||||
doc: Box<Rope>,
|
||||
num_tokens_diff_base: u32,
|
||||
interned: InternedInput<RopeSlice<'static>>,
|
||||
}
|
||||
@ -34,8 +34,8 @@ pub fn new(diff_base: Rope, doc: Rope) -> InternedRopeLines {
|
||||
after: Vec::with_capacity(doc.len_lines()),
|
||||
interner: Interner::new(diff_base.len_lines() + doc.len_lines()),
|
||||
},
|
||||
diff_base,
|
||||
doc,
|
||||
diff_base: Box::new(diff_base),
|
||||
doc: Box::new(doc),
|
||||
// will be populated by update_diff_base_impl
|
||||
num_tokens_diff_base: 0,
|
||||
};
|
||||
@ -44,19 +44,19 @@ pub fn new(diff_base: Rope, doc: Rope) -> InternedRopeLines {
|
||||
}
|
||||
|
||||
pub fn doc(&self) -> Rope {
|
||||
self.doc.clone()
|
||||
Rope::clone(&*self.doc)
|
||||
}
|
||||
|
||||
pub fn diff_base(&self) -> Rope {
|
||||
self.diff_base.clone()
|
||||
Rope::clone(&*self.diff_base)
|
||||
}
|
||||
|
||||
/// Updates the `diff_base` and optionally the document if `doc` is not None
|
||||
pub fn update_diff_base(&mut self, diff_base: Rope, doc: Option<Rope>) {
|
||||
self.interned.clear();
|
||||
self.diff_base = diff_base;
|
||||
self.diff_base = Box::new(diff_base);
|
||||
if let Some(doc) = doc {
|
||||
self.doc = doc
|
||||
self.doc = Box::new(doc)
|
||||
}
|
||||
if !self.is_too_large() {
|
||||
self.update_diff_base_impl();
|
||||
@ -74,7 +74,7 @@ pub fn update_doc(&mut self, doc: Rope) {
|
||||
.interner
|
||||
.erase_tokens_after(self.num_tokens_diff_base.into());
|
||||
|
||||
self.doc = doc;
|
||||
self.doc = Box::new(doc);
|
||||
if self.is_too_large() {
|
||||
self.interned.after.clear();
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user