History

TimeSeriesPlatformLibrary: Made sure free DataRow values before updating them.

J. Ritchie Carroll committed 7 years ago

Commit 6955f7c1 parent 3e93bb22 files · +19 −4Browse files

Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Data/DataRow.cpp (1 of 2 files). Show all

Unified · Split

Source/Libraries/TimeSeriesPlatformLibrary/Data/DataRow.cpp+17−2
@@ -328,10 +328,10 @@ Object DataRow::GetComputedValue(const DataColumnPtr& column, DataType targetTyp · 327 unmodified lines
328 case DataType::String:328 case DataType::String:
329 return value;329 return value;
330 case DataType::Boolean:330 case DataType::Boolean:
331 if (IsEqual(value, "true") || IsEqual(value, "1"))331 if (IsEqual(value, "true") || IsEqual(value, "1", false))
332 return true;332 return true;
333 333
334 if (IsEqual(value, "false") || IsEqual(value, "0"))334 if (IsEqual(value, "false") || IsEqual(value, "0", false))
335 return false;335 return false;
336 336
337 throw DataSetException("Cannot convert \"String\" expression value \"" + value + "\" to \"Boolean\" column");337 throw DataSetException("Cannot convert \"String\" expression value \"" + value + "\" to \"Boolean\" column");
@@ -463,6 +463,9 @@ void DataRow::SetValue(int32_t columnIndex, const Nullable<T>& value, DataType t · 125 unmodified lines
463{463{
464 ValidateColumnType(columnIndex, targetType);464 ValidateColumnType(columnIndex, targetType);
465 465
466 // Free any existing value on updates
467 free(m_values[columnIndex]);
468
466 if (value.HasValue())469 if (value.HasValue())
467 {470 {
468 uint8_t* copy = static_cast<uint8_t*>(malloc(sizeof(T)));471 uint8_t* copy = static_cast<uint8_t*>(malloc(sizeof(T)));
@@ -571,6 +574,9 @@ void DataRow::SetStringValue(int32_t columnIndex, const Nullable<string>& value) · 102 unmodified lines
571{574{
572 ValidateColumnType(columnIndex, DataType::String);575 ValidateColumnType(columnIndex, DataType::String);
573 576
577 // Free any existing value on updates
578 free(m_values[columnIndex]);
579
574 if (value.HasValue())580 if (value.HasValue())
575 {581 {
576 const string& strval = value.GetValueOrDefault();582 const string& strval = value.GetValueOrDefault();
@@ -614,6 +620,9 @@ void DataRow::SetBooleanValue(int32_t columnIndex, const Nullable<bool>& value) · 37 unmodified lines
614{620{
615 ValidateColumnType(columnIndex, DataType::Boolean);621 ValidateColumnType(columnIndex, DataType::Boolean);
616 622
623 // Free any existing value on updates
624 free(m_values[columnIndex]);
625
617 if (value.HasValue())626 if (value.HasValue())
618 {627 {
619 uint8_t* copy = static_cast<uint8_t*>(malloc(1));628 uint8_t* copy = static_cast<uint8_t*>(malloc(1));
@@ -715,6 +724,9 @@ void DataRow::SetDecimalValue(int32_t columnIndex, const Nullable<decimal_t>& va · 95 unmodified lines
715{724{
716 ValidateColumnType(columnIndex, DataType::Decimal);725 ValidateColumnType(columnIndex, DataType::Decimal);
717 726
727 // Free any existing value on updates
728 free(m_values[columnIndex]);
729
718 if (value.HasValue())730 if (value.HasValue())
719 {731 {
720 // The boost decimal type has a very complex internal representation,732 // The boost decimal type has a very complex internal representation,
@@ -764,6 +776,9 @@ void DataRow::SetGuidValue(int32_t columnIndex, const Nullable<GSF::Guid>& value · 43 unmodified lines
764{776{
765 ValidateColumnType(columnIndex, DataType::Guid);777 ValidateColumnType(columnIndex, DataType::Guid);
766 778
779 // Free any existing value on updates
780 free(m_values[columnIndex]);
781
767 if (value.HasValue())782 if (value.HasValue())
768 {783 {
769 int8_t* copy = static_cast<int8_t*>(malloc(16));784 int8_t* copy = static_cast<int8_t*>(malloc(16));

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t