Skip to content

Commit 056ff85

Browse files
committed
fix: do not leave uninitialized bytes in datatype input function
Signed-off-by: usamoi <[email protected]>
1 parent 360ff16 commit 056ff85

File tree

3 files changed

+11
-0
lines changed

3 files changed

+11
-0
lines changed

src/datatype/vecf16.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ CREATE TYPE vecf16 (
4040
pub struct Vecf16 {
4141
varlena: u32,
4242
kind: u8,
43+
pad: u8,
4344
len: u16,
4445
phantom: [F16; 0],
4546
}
@@ -62,6 +63,7 @@ impl Vecf16 {
6263
let ptr = std::alloc::alloc(layout) as *mut Vecf16;
6364
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf16::varlena(layout.size()));
6465
std::ptr::addr_of_mut!((*ptr).kind).write(16);
66+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
6567
std::ptr::addr_of_mut!((*ptr).len).write(slice.len() as u16);
6668
std::ptr::copy_nonoverlapping(slice.as_ptr(), (*ptr).phantom.as_mut_ptr(), slice.len());
6769
Box::from_raw(ptr)
@@ -74,6 +76,7 @@ impl Vecf16 {
7476
let ptr = pgrx::pg_sys::palloc(layout.size()) as *mut Vecf16;
7577
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf16::varlena(layout.size()));
7678
std::ptr::addr_of_mut!((*ptr).kind).write(16);
79+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
7780
std::ptr::addr_of_mut!((*ptr).len).write(slice.len() as u16);
7881
std::ptr::copy_nonoverlapping(slice.as_ptr(), (*ptr).phantom.as_mut_ptr(), slice.len());
7982
Vecf16Output(NonNull::new(ptr).unwrap())
@@ -86,6 +89,7 @@ impl Vecf16 {
8689
let ptr = std::alloc::alloc_zeroed(layout) as *mut Vecf16;
8790
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf16::varlena(layout.size()));
8891
std::ptr::addr_of_mut!((*ptr).kind).write(16);
92+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
8993
std::ptr::addr_of_mut!((*ptr).len).write(len as u16);
9094
Box::from_raw(ptr)
9195
}
@@ -98,6 +102,7 @@ impl Vecf16 {
98102
let ptr = pgrx::pg_sys::palloc0(layout.size()) as *mut Vecf16;
99103
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf16::varlena(layout.size()));
100104
std::ptr::addr_of_mut!((*ptr).kind).write(16);
105+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
101106
std::ptr::addr_of_mut!((*ptr).len).write(len as u16);
102107
Vecf16Output(NonNull::new(ptr).unwrap())
103108
}

src/datatype/vecf32.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ CREATE TYPE vector (
4040
pub struct Vecf32 {
4141
varlena: u32,
4242
kind: u8,
43+
pad: u8,
4344
len: u16,
4445
phantom: [F32; 0],
4546
}
@@ -62,6 +63,7 @@ impl Vecf32 {
6263
let ptr = std::alloc::alloc(layout) as *mut Vecf32;
6364
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf32::varlena(layout.size()));
6465
std::ptr::addr_of_mut!((*ptr).kind).write(32);
66+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
6567
std::ptr::addr_of_mut!((*ptr).len).write(slice.len() as u16);
6668
std::ptr::copy_nonoverlapping(slice.as_ptr(), (*ptr).phantom.as_mut_ptr(), slice.len());
6769
Box::from_raw(ptr)
@@ -74,6 +76,7 @@ impl Vecf32 {
7476
let ptr = pgrx::pg_sys::palloc(layout.size()) as *mut Vecf32;
7577
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf32::varlena(layout.size()));
7678
std::ptr::addr_of_mut!((*ptr).kind).write(32);
79+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
7780
std::ptr::addr_of_mut!((*ptr).len).write(slice.len() as u16);
7881
std::ptr::copy_nonoverlapping(slice.as_ptr(), (*ptr).phantom.as_mut_ptr(), slice.len());
7982
Vecf32Output(NonNull::new(ptr).unwrap())
@@ -86,6 +89,7 @@ impl Vecf32 {
8689
let ptr = std::alloc::alloc_zeroed(layout) as *mut Vecf32;
8790
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf32::varlena(layout.size()));
8891
std::ptr::addr_of_mut!((*ptr).kind).write(32);
92+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
8993
std::ptr::addr_of_mut!((*ptr).len).write(len as u16);
9094
Box::from_raw(ptr)
9195
}
@@ -98,6 +102,7 @@ impl Vecf32 {
98102
let ptr = pgrx::pg_sys::palloc0(layout.size()) as *mut Vecf32;
99103
std::ptr::addr_of_mut!((*ptr).varlena).write(Vecf32::varlena(layout.size()));
100104
std::ptr::addr_of_mut!((*ptr).kind).write(32);
105+
std::ptr::addr_of_mut!((*ptr).pad).write(0);
101106
std::ptr::addr_of_mut!((*ptr).len).write(len as u16);
102107
Vecf32Output(NonNull::new(ptr).unwrap())
103108
}

src/index/utils.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use service::prelude::DynamicVector;
66
struct Header {
77
varlena: u32,
88
kind: u8,
9+
pad: u8,
910
len: u16,
1011
}
1112

0 commit comments

Comments
 (0)