Skip to content
This repository was archived by the owner on Jun 14, 2024. It is now read-only.

Commit 84d688d

Browse files
committed
bugfix_CimPropertyArrayValueIsAlwaysNullIssue
1 parent 45725b9 commit 84d688d

File tree

2 files changed

+50
-43
lines changed

2 files changed

+50
-43
lines changed

src/Microsoft.Management.Infrastructure/CimProperty.cs

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using Microsoft.Management.Infrastructure.Internal.Data;
88
using Microsoft.Management.Infrastructure.Native;
99
using System;
10+
using System.Collections;
1011
using System.Globalization;
1112

1213
namespace Microsoft.Management.Infrastructure
@@ -105,7 +106,13 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
105106
if (value == null) return null;
106107

107108
MI_Value miv = new MI_Value();
108-
var arrayOfObjects = value as object[];
109+
var count = 0;
110+
IList arrayOfObjects = null;
111+
if (value.GetType().IsArray)
112+
{
113+
arrayOfObjects = (IList)value;
114+
count = arrayOfObjects.Count;
115+
}
109116
switch (cimType)
110117
{
111118
case CimType.Boolean:
@@ -172,8 +179,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
172179
case CimType.BooleanArray:
173180
if (arrayOfObjects != null)
174181
{
175-
Boolean[] array = new Boolean[arrayOfObjects.Length];
176-
for (int i = 0; i < arrayOfObjects.Length; i++)
182+
Boolean[] array = new Boolean[count];
183+
for (int i = 0; i < count; i++)
177184
{
178185
array[i] = Convert.ToBoolean(arrayOfObjects[i], CultureInfo.InvariantCulture);
179186
}
@@ -185,8 +192,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
185192
case CimType.Char16Array:
186193
if (arrayOfObjects != null)
187194
{
188-
Char[] array = new Char[arrayOfObjects.Length];
189-
for (int i = 0; i < arrayOfObjects.Length; i++)
195+
Char[] array = new Char[count];
196+
for (int i = 0; i < count; i++)
190197
{
191198
array[i] = Convert.ToChar(arrayOfObjects[i], CultureInfo.InvariantCulture);
192199
}
@@ -198,8 +205,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
198205
case CimType.Real32Array:
199206
if (arrayOfObjects != null)
200207
{
201-
Single[] array = new Single[arrayOfObjects.Length];
202-
for (int i = 0; i < arrayOfObjects.Length; i++)
208+
Single[] array = new Single[count];
209+
for (int i = 0; i < count; i++)
203210
{
204211
array[i] = Convert.ToSingle(arrayOfObjects[i], CultureInfo.InvariantCulture);
205212
}
@@ -211,8 +218,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
211218
case CimType.Real64Array:
212219
if (arrayOfObjects != null)
213220
{
214-
Double[] array = new Double[arrayOfObjects.Length];
215-
for (int i = 0; i < arrayOfObjects.Length; i++)
221+
Double[] array = new Double[count];
222+
for (int i = 0; i < count; i++)
216223
{
217224
array[i] = Convert.ToDouble(arrayOfObjects[i], CultureInfo.InvariantCulture);
218225
}
@@ -224,8 +231,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
224231
case CimType.SInt16Array:
225232
if (arrayOfObjects != null)
226233
{
227-
Int16[] array = new Int16[arrayOfObjects.Length];
228-
for (int i = 0; i < arrayOfObjects.Length; i++)
234+
Int16[] array = new Int16[count];
235+
for (int i = 0; i < count; i++)
229236
{
230237
array[i] = Convert.ToInt16(arrayOfObjects[i], CultureInfo.InvariantCulture);
231238
}
@@ -237,8 +244,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
237244
case CimType.SInt32Array:
238245
if (arrayOfObjects != null)
239246
{
240-
Int32[] array = new Int32[arrayOfObjects.Length];
241-
for (int i = 0; i < arrayOfObjects.Length; i++)
247+
Int32[] array = new Int32[count];
248+
for (int i = 0; i < count; i++)
242249
{
243250
array[i] = Convert.ToInt32(arrayOfObjects[i], CultureInfo.InvariantCulture);
244251
}
@@ -250,8 +257,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
250257
case CimType.SInt64Array:
251258
if (arrayOfObjects != null)
252259
{
253-
Int64[] array = new Int64[arrayOfObjects.Length];
254-
for (int i = 0; i < arrayOfObjects.Length; i++)
260+
Int64[] array = new Int64[count];
261+
for (int i = 0; i < count; i++)
255262
{
256263
array[i] = Convert.ToInt64(arrayOfObjects[i], CultureInfo.InvariantCulture);
257264
}
@@ -263,8 +270,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
263270
case CimType.SInt8Array:
264271
if (arrayOfObjects != null)
265272
{
266-
SByte[] array = new SByte[arrayOfObjects.Length];
267-
for (int i = 0; i < arrayOfObjects.Length; i++)
273+
SByte[] array = new SByte[count];
274+
for (int i = 0; i < count; i++)
268275
{
269276
array[i] = Convert.ToSByte(arrayOfObjects[i], CultureInfo.InvariantCulture);
270277
}
@@ -276,8 +283,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
276283
case CimType.StringArray:
277284
if (arrayOfObjects != null)
278285
{
279-
String[] array = new String[arrayOfObjects.Length];
280-
for (int i = 0; i < arrayOfObjects.Length; i++)
286+
String[] array = new String[count];
287+
for (int i = 0; i < count; i++)
281288
{
282289
if (arrayOfObjects[i] is Boolean)
283290
{
@@ -300,8 +307,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
300307
case CimType.UInt16Array:
301308
if (arrayOfObjects != null)
302309
{
303-
UInt16[] array = new UInt16[arrayOfObjects.Length];
304-
for (int i = 0; i < arrayOfObjects.Length; i++)
310+
UInt16[] array = new UInt16[count];
311+
for (int i = 0; i < count; i++)
305312
{
306313
array[i] = Convert.ToUInt16(arrayOfObjects[i], CultureInfo.InvariantCulture);
307314
}
@@ -313,8 +320,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
313320
case CimType.UInt32Array:
314321
if (arrayOfObjects != null)
315322
{
316-
UInt32[] array = new UInt32[arrayOfObjects.Length];
317-
for (int i = 0; i < arrayOfObjects.Length; i++)
323+
UInt32[] array = new UInt32[count];
324+
for (int i = 0; i < count; i++)
318325
{
319326
array[i] = Convert.ToUInt32(arrayOfObjects[i], CultureInfo.InvariantCulture);
320327
}
@@ -326,8 +333,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
326333
case CimType.UInt64Array:
327334
if (arrayOfObjects != null)
328335
{
329-
UInt64[] array = new UInt64[arrayOfObjects.Length];
330-
for (int i = 0; i < arrayOfObjects.Length; i++)
336+
UInt64[] array = new UInt64[count];
337+
for (int i = 0; i < count; i++)
331338
{
332339
array[i] = Convert.ToUInt64(arrayOfObjects[i], CultureInfo.InvariantCulture);
333340
}
@@ -339,8 +346,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
339346
case CimType.UInt8Array:
340347
if (arrayOfObjects != null)
341348
{
342-
Byte[] array = new Byte[arrayOfObjects.Length];
343-
for (int i = 0; i < arrayOfObjects.Length; i++)
349+
Byte[] array = new Byte[count];
350+
for (int i = 0; i < count; i++)
344351
{
345352
array[i] = Convert.ToByte(arrayOfObjects[i], CultureInfo.InvariantCulture);
346353
}
@@ -356,8 +363,8 @@ internal static MI_Value ConvertToNativeLayer(object value, CimType cimType)
356363
case CimType.DateTimeArray:
357364
if (arrayOfObjects != null)
358365
{
359-
MI_Datetime[] array = new MI_Datetime[arrayOfObjects.Length];
360-
for (int i = 0; i < arrayOfObjects.Length; i++)
366+
MI_Datetime[] array = new MI_Datetime[count];
367+
for (int i = 0; i < count; i++)
361368
{
362369
array[i] = MI_Datetime.ConvertToDateTime(arrayOfObjects[i]);
363370
}

test/Microsoft.Management.Infrastructure.Tests/UnitTests/CimInstanceTest.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -718,7 +718,7 @@ public void Properties_Add_ValueAndType_Reference()
718718
Assert.Equal(CimType.Reference, addedProperty.CimType, "addedProperty.CimType is not correct");
719719
}
720720

721-
[TDDFact]
721+
[Fact]
722722
public void Properties_Add_ValueAndType_BooleanArray()
723723
{
724724
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -735,7 +735,7 @@ public void Properties_Add_ValueAndType_BooleanArray()
735735
Assert.Equal(CimType.BooleanArray, addedProperty.CimType, "addedProperty.CimType is not correct");
736736
}
737737

738-
[TDDFact]
738+
[Fact]
739739
public void Properties_Add_ValueAndType_SInt8Array()
740740
{
741741
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -752,7 +752,7 @@ public void Properties_Add_ValueAndType_SInt8Array()
752752
Assert.Equal(CimType.SInt8Array, addedProperty.CimType, "addedProperty.CimType is not correct");
753753
}
754754

755-
[TDDFact]
755+
[Fact]
756756
public void Properties_Add_ValueAndType_UInt8Array()
757757
{
758758
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -769,7 +769,7 @@ public void Properties_Add_ValueAndType_UInt8Array()
769769
Assert.Equal(CimType.UInt8Array, addedProperty.CimType, "addedProperty.CimType is not correct");
770770
}
771771

772-
[TDDFact]
772+
[Fact]
773773
public void Properties_Add_ValueAndType_SInt16Array()
774774
{
775775
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -786,7 +786,7 @@ public void Properties_Add_ValueAndType_SInt16Array()
786786
Assert.Equal(CimType.SInt16Array, addedProperty.CimType, "addedProperty.CimType is not correct");
787787
}
788788

789-
[TDDFact]
789+
[Fact]
790790
public void Properties_Add_ValueAndType_UInt16Array()
791791
{
792792
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -803,7 +803,7 @@ public void Properties_Add_ValueAndType_UInt16Array()
803803
Assert.Equal(CimType.UInt16Array, addedProperty.CimType, "addedProperty.CimType is not correct");
804804
}
805805

806-
[TDDFact]
806+
[Fact]
807807
public void Properties_Add_ValueAndType_SInt32Array()
808808
{
809809
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -837,7 +837,7 @@ public void Properties_Add_ValueAndType_SInt32Array_InferredType()
837837
Assert.Equal(CimType.SInt32Array, addedProperty.CimType, "addedProperty.CimType is not correct");
838838
}
839839

840-
[TDDFact]
840+
[Fact]
841841
public void Properties_Add_ValueAndType_UInt32Array()
842842
{
843843
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -854,7 +854,7 @@ public void Properties_Add_ValueAndType_UInt32Array()
854854
Assert.Equal(CimType.UInt32Array, addedProperty.CimType, "addedProperty.CimType is not correct");
855855
}
856856

857-
[TDDFact]
857+
[Fact]
858858
public void Properties_Add_ValueAndType_SInt64Array()
859859
{
860860
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -871,7 +871,7 @@ public void Properties_Add_ValueAndType_SInt64Array()
871871
Assert.Equal(CimType.SInt64Array, addedProperty.CimType, "addedProperty.CimType is not correct");
872872
}
873873

874-
[TDDFact]
874+
[Fact]
875875
public void Properties_Add_ValueAndType_UInt64Array()
876876
{
877877
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -888,7 +888,7 @@ public void Properties_Add_ValueAndType_UInt64Array()
888888
Assert.Equal(CimType.UInt64Array, addedProperty.CimType, "addedProperty.CimType is not correct");
889889
}
890890

891-
[TDDFact]
891+
[Fact]
892892
public void Properties_Add_ValueAndType_Real32Array()
893893
{
894894
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -907,7 +907,7 @@ public void Properties_Add_ValueAndType_Real32Array()
907907
Assert.Equal(CimType.Real32Array, addedProperty.CimType, "addedProperty.CimType is not correct");
908908
}
909909

910-
[TDDFact]
910+
[Fact]
911911
public void Properties_Add_ValueAndType_Real64Array()
912912
{
913913
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -926,7 +926,7 @@ public void Properties_Add_ValueAndType_Real64Array()
926926
Assert.Equal(addedProperty.CimType, CimType.Real64Array, "addedProperty.CimType is not correct");
927927
}
928928

929-
[TDDFact]
929+
[Fact]
930930
public void Properties_Add_ValueAndType_Char16Array()
931931
{
932932
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -1027,7 +1027,7 @@ public void Properties_Add_ValueAndType_DateTimeArray_Mixed_InferredType()
10271027
Assert.Equal(CimType.DateTimeArray, addedProperty.CimType, "addedProperty.CimType is not correct");
10281028
}
10291029

1030-
[TDDFact]
1030+
[Fact]
10311031
public void Properties_Add_ValueAndType_StringArray()
10321032
{
10331033
CimInstance cimInstance = new CimInstance("MyClassName");
@@ -1108,7 +1108,7 @@ public void Properties_Set_ValueAndType_SInt32()
11081108
Assert.Equal(CimType.SInt32, addedProperty.CimType, "addedProperty.CimType is not correct");
11091109
}
11101110

1111-
[TDDFact]
1111+
[Fact]
11121112
public void Properties_Set_ValueAndType_SInt32Array()
11131113
{
11141114
CimInstance cimInstance = new CimInstance("MyClassName");

0 commit comments

Comments
 (0)