@@ -1960,6 +1960,9 @@ pub mod raw {
1960
1960
* may overlap.
1961
1961
*/
1962
1962
pub unsafe fn memcpy < T > ( dst : & [ mut T ] , src : & [ const T ] , count : uint ) {
1963
+ assert dst. len ( ) >= count;
1964
+ assert src. len ( ) >= count;
1965
+
1963
1966
do as_mut_buf( dst) |p_dst, _len_dst| {
1964
1967
do as_const_buf ( src) |p_src, _len_src| {
1965
1968
ptr:: memcpy ( p_dst, p_src, count)
@@ -1974,6 +1977,9 @@ pub mod raw {
1974
1977
* may overlap.
1975
1978
*/
1976
1979
pub unsafe fn memmove < T > ( dst : & [ mut T ] , src : & [ const T ] , count : uint ) {
1980
+ assert dst. len ( ) >= count;
1981
+ assert src. len ( ) >= count;
1982
+
1977
1983
do as_mut_buf( dst) |p_dst, _len_dst| {
1978
1984
do as_const_buf ( src) |p_src, _len_src| {
1979
1985
ptr:: memmove ( p_dst, p_src, count)
@@ -3730,6 +3736,15 @@ mod tests {
3730
3736
fail
3731
3737
}
3732
3738
}
3739
+
3740
+ #[ test]
3741
+ #[ should_fail]
3742
+ fn test_memcpy_oob ( ) unsafe {
3743
+ let a = [ mut 1 , 2 , 3 , 4 ] ;
3744
+ let b = [ 1 , 2 , 3 , 4 , 5 ] ;
3745
+ raw:: memcpy ( a, b, 5 ) ;
3746
+ }
3747
+
3733
3748
}
3734
3749
3735
3750
// Local Variables:
0 commit comments