Skip to content

Commit beaea19

Browse files
committed
Handle string conversion
1 parent bf805b8 commit beaea19

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

pkg/inventory/systeminfo/collector_darwin.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,28 @@ func collect() (*SystemInfo, error) {
2727
defer C.free(unsafe.Pointer(cInfo.productName))
2828
defer C.free(unsafe.Pointer(cInfo.serialNumber))
2929

30+
// Safely convert C strings to Go strings, handling NULL pointers
31+
var modelNumber, serialNumber, modelName, identifier string
32+
if cInfo.modelNumber != nil {
33+
modelNumber = C.GoString(cInfo.modelNumber)
34+
}
35+
if cInfo.serialNumber != nil {
36+
serialNumber = C.GoString(cInfo.serialNumber)
37+
}
38+
if cInfo.productName != nil {
39+
modelName = C.GoString(cInfo.productName)
40+
}
41+
if cInfo.modelIdentifier != nil {
42+
identifier = C.GoString(cInfo.modelIdentifier)
43+
}
44+
3045
return &SystemInfo{
3146
Manufacturer: "Apple Inc.",
32-
ModelNumber: C.GoString(cInfo.modelNumber),
33-
SerialNumber: C.GoString(cInfo.serialNumber),
34-
ModelName: C.GoString(cInfo.productName),
35-
ChassisType: getChassisType(C.GoString(cInfo.productName), C.GoString(cInfo.modelIdentifier)),
36-
Identifier: C.GoString(cInfo.modelIdentifier),
47+
ModelNumber: modelNumber,
48+
SerialNumber: serialNumber,
49+
ModelName: modelName,
50+
ChassisType: getChassisType(modelName, identifier),
51+
Identifier: identifier,
3752
}, nil
3853
}
3954

pkg/inventory/systeminfo/systeminfo_darwin.m

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,23 @@ DeviceInfo getDeviceInfo(void) {
4646
asprintf(&info.modelNumber, "%s%s", modelNum, region);
4747
free(modelNum);
4848
free(region);
49-
} else {
49+
} else if (modelNum) {
5050
info.modelNumber = modelNum;
51-
free(region);
5251
}
52+
// Note: info.modelNumber remains NULL if modelNum was NULL, which is acceptable
5353
}
5454

5555
NSDictionary *product = getServiceProperties(IOServiceNameMatching("product"));
5656
if (product) {
5757
info.productName = copyStringProperty(product, @"product-name");
5858
}
5959
if (!product || !info.productName) {
60-
info.productName = strdup(info.modelIdentifier);
60+
// Fallback to modelIdentifier if available, otherwise use empty string
61+
if (info.modelIdentifier) {
62+
info.productName = strdup(info.modelIdentifier);
63+
} else {
64+
info.productName = strdup("");
65+
}
6166
}
6267

6368
return info;

0 commit comments

Comments
 (0)