mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-30 11:40:01 +00:00
Fix a bug where a floating point number was cast to int and the value was stored incorrectly because of low byte width. (#7703)
Reported in https://github.com/google/flatbuffers/issues/7690
This commit is contained in:
@@ -9,7 +9,7 @@ class BitWidthUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static BitWidth width(num value) {
|
static BitWidth width(num value) {
|
||||||
if (value.toInt() == value) {
|
if (value is int) {
|
||||||
var v = value.toInt().abs();
|
var v = value.toInt().abs();
|
||||||
if (v >> 7 == 0) return BitWidth.width8;
|
if (v >> 7 == 0) return BitWidth.width8;
|
||||||
if (v >> 15 == 0) return BitWidth.width16;
|
if (v >> 15 == 0) return BitWidth.width16;
|
||||||
|
|||||||
@@ -40,6 +40,10 @@ void main() {
|
|||||||
flx.addInt(-1025);
|
flx.addInt(-1025);
|
||||||
expect(flx.finish(), [255, 251, 5, 2]);
|
expect(flx.finish(), [255, 251, 5, 2]);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
var builder = Builder()..addDouble(1.0);
|
||||||
|
expect(builder.finish(), [0, 0, 128, 63, 14, 4]);
|
||||||
|
}
|
||||||
{
|
{
|
||||||
var flx = Builder();
|
var flx = Builder();
|
||||||
flx.addDouble(0.1);
|
flx.addDouble(0.1);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ void main() {
|
|||||||
// expect(FlxValue.fromBuffer(b([255, 255, 255, 255, 255, 255, 255, 255, 11, 8])).intValue, 18446744073709551615);
|
// expect(FlxValue.fromBuffer(b([255, 255, 255, 255, 255, 255, 255, 255, 11, 8])).intValue, 18446744073709551615);
|
||||||
});
|
});
|
||||||
test('double value', () {
|
test('double value', () {
|
||||||
|
expect(Reference.fromBuffer(b([0, 0, 128, 63, 14, 4])).doubleValue, 1.0);
|
||||||
expect(Reference.fromBuffer(b([0, 0, 144, 64, 14, 4])).doubleValue, 4.5);
|
expect(Reference.fromBuffer(b([0, 0, 144, 64, 14, 4])).doubleValue, 4.5);
|
||||||
expect(Reference.fromBuffer(b([205, 204, 204, 61, 14, 4])).doubleValue,
|
expect(Reference.fromBuffer(b([205, 204, 204, 61, 14, 4])).doubleValue,
|
||||||
closeTo(.1, .001));
|
closeTo(.1, .001));
|
||||||
|
|||||||
Reference in New Issue
Block a user