fix(PIVariant): add missing break in setValueFromString switch

Three complex type cases (pivComplexf, pivComplexd, pivComplexld)
lacked break statements, causing fallthrough to pivTime. Setting
a complex variant from string silently overwrote the value with
PITime::fromString(), corrupting the variant's type and data.
This commit is contained in:
2026-08-06 17:01:30 +03:00
committed by andrey
parent ef8fdb30f4
commit c3cd9496dd
+4 -4
View File
@@ -133,15 +133,15 @@ void PIVariant::setValueFromString(const PIString & v) {
case PIVariant::pivComplexf: {
PIStringList sl = v.mid(1, v.size_s() - 2).split(';');
setValue(complexf(sl.size() > 0 ? sl[0].toFloat() : 0.f, sl.size() > 1 ? sl[1].toFloat() : 0.f));
}
} break;
case PIVariant::pivComplexd: {
PIStringList sl = v.mid(1, v.size_s() - 2).split(';');
setValue(complexd(sl.size() > 0 ? sl[0].toDouble() : 0., sl.size() > 1 ? sl[1].toDouble() : 0.));
}
} break;
case PIVariant::pivComplexld: {
PIStringList sl = v.mid(1, v.size_s() - 2).split(';');
setValue(complexld(sl.size() > 0 ? sl[0].toLDouble() : 0.L, sl.size() > 1 ? sl[1].toLDouble() : 0.L));
}
} break;
case PIVariant::pivTime: {
setValue(PITime::fromString(v));
} break;
@@ -243,7 +243,7 @@ PIVariant::Type PIVariant::typeFromName(const PIString & tname) {
if (s == "int" || s == "signed" || s == "signedint" || s == "int32_t") return PIVariant::pivInt;
if (s == "long" || s == "longint" || s == "signedlong" || s == "signedlongint" || s == "sdword") return PIVariant::pivInt;
if (s == "llong" || s == "longlong" || s == "longlongint" || s == "signedlonglong" || s == "signedlonglongint" || s == "sqword" ||
s == "int64_t")
s == "int64_t")
return PIVariant::pivLLong;
if (s == "uchar" || s == "byte" || s == "uint8_t") return PIVariant::pivUChar;
if (s == "ushort" || s == "unsignedshort" || s == "unsignedshortint" || s == "word" || s == "uint16_t") return PIVariant::pivUShort;