projects
/
rust-101.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix potential invalid memory reference.
[rust-101.git]
/
solutions
/
src
/
list.rs
diff --git
a/solutions/src/list.rs
b/solutions/src/list.rs
index 5137555af65eb4ea3797c29e069382631a2606ab..c7ae6ad2565651a2628536cce710d2e3cdb1c2c4 100644
(file)
--- a/
solutions/src/list.rs
+++ b/
solutions/src/list.rs
@@
-53,6
+53,8
@@
impl<T> LinkedList<T> {
if new_last.is_null() {
// The list is now empty.
self.first = new_last;
if new_last.is_null() {
// The list is now empty.
self.first = new_last;
+ } else {
+ unsafe { (*new_last).next = ptr::null_mut() };
}
let last = unsafe { raw_into_box(last) } ;
Some(last.data)
}
let last = unsafe { raw_into_box(last) } ;
Some(last.data)
@@
-86,6
+88,8
@@
impl<T> LinkedList<T> {
if new_first.is_null() {
// The list is now empty.
self.last = new_first;
if new_first.is_null() {
// The list is now empty.
self.last = new_first;
+ } else {
+ unsafe { (*new_first).prev = ptr::null_mut() };
}
let first = unsafe { raw_into_box(first) } ;
Some(first.data)
}
let first = unsafe { raw_into_box(first) } ;
Some(first.data)
@@
-101,7
+105,7
@@
impl<T> LinkedList<T> {
}
}
}
}
- pub fn iter_mut(&self) -> IterMut<T> {
+ pub fn iter_mut(&
mut
self) -> IterMut<T> {
IterMut { next: self.first, _marker: PhantomData }
}
}
IterMut { next: self.first, _marker: PhantomData }
}
}