mirror of
https://github.com/huggingface/candle.git
synced 2025-06-17 11:08:52 +00:00
Fix float unpickling. (#1730)
This commit is contained in:
@ -42,7 +42,7 @@ pub enum OpCode {
|
|||||||
Stop = b'.',
|
Stop = b'.',
|
||||||
NewObj = 0x81,
|
NewObj = 0x81,
|
||||||
EmptyList = b']',
|
EmptyList = b']',
|
||||||
BinFloat = b'g',
|
BinFloat = b'G',
|
||||||
Append = b'a',
|
Append = b'a',
|
||||||
Appends = b'e',
|
Appends = b'e',
|
||||||
}
|
}
|
||||||
@ -462,7 +462,10 @@ impl Stack {
|
|||||||
self.push(Object::Int(arg))
|
self.push(Object::Int(arg))
|
||||||
}
|
}
|
||||||
OpCode::BinFloat => {
|
OpCode::BinFloat => {
|
||||||
let arg = r.read_f64::<LittleEndian>()?;
|
// Somehow floats are encoded using BigEndian whereas int types use LittleEndian.
|
||||||
|
// https://github.com/python/cpython/blob/0c80da4c14d904a367968955544dd6ae58c8101c/Lib/pickletools.py#L855
|
||||||
|
// https://github.com/pytorch/pytorch/blob/372d078f361e726bb4ac0884ac334b04c58179ef/torch/_weights_only_unpickler.py#L243
|
||||||
|
let arg = r.read_f64::<byteorder::BigEndian>()?;
|
||||||
self.push(Object::Float(arg))
|
self.push(Object::Float(arg))
|
||||||
}
|
}
|
||||||
OpCode::BinUnicode => {
|
OpCode::BinUnicode => {
|
||||||
|
Reference in New Issue
Block a user