Loading...
--- xnu/xnu-12377.121.6/libkdd/KCDBasicTypeDescription.m
+++ xnu/xnu-3789.31.2/libkdd/KCDBasicTypeDescription.m
@@ -90,25 +90,20 @@
return self;
}
-#define read_unaligned(type, data) ({ \
- type x; \
- memcpy((void*)&x, (void*)(data), sizeof(type)); \
- x; })
-
- (NSObject *)objectForType:(kctype_subtype_t)elem_type withData:(uint8_t *)data
{
NSObject * obj;
switch (elem_type) {
case KC_ST_CHAR: obj = [NSString stringWithFormat:@"%c", *(char *)data]; break;
- case KC_ST_INT8: obj = [NSNumber numberWithInt:read_unaligned(int8_t, data)]; break;
- case KC_ST_UINT8: obj = [NSNumber numberWithInt:read_unaligned(uint8_t, data)]; break;
- case KC_ST_INT16: obj = [NSNumber numberWithShort:read_unaligned(int16_t, data)]; break;
- case KC_ST_UINT16: obj = [NSNumber numberWithUnsignedShort:read_unaligned(uint16_t, data)]; break;
- case KC_ST_INT32: obj = [NSNumber numberWithInt:read_unaligned(int32_t, data)]; break;
- case KC_ST_UINT32: obj = [NSNumber numberWithUnsignedInt:read_unaligned(uint32_t, data)]; break;
- case KC_ST_INT64: obj = [NSNumber numberWithLongLong:read_unaligned(int64_t, data)]; break;
- case KC_ST_UINT64: obj = [NSNumber numberWithUnsignedLongLong:read_unaligned(uint64_t, data)]; break;
+ case KC_ST_INT8: obj = [NSNumber numberWithInt:*(int8_t *)data]; break;
+ case KC_ST_UINT8: obj = [NSNumber numberWithInt:*(uint8_t *)data]; break;
+ case KC_ST_INT16: obj = [NSNumber numberWithShort:*(int16_t *)data]; break;
+ case KC_ST_UINT16: obj = [NSNumber numberWithUnsignedShort:*(uint16_t *)data]; break;
+ case KC_ST_INT32: obj = [NSNumber numberWithInt:*(int32_t *)data]; break;
+ case KC_ST_UINT32: obj = [NSNumber numberWithUnsignedInt:*(uint32_t *)data]; break;
+ case KC_ST_INT64: obj = [NSNumber numberWithLongLong:*(int64_t *)data]; break;
+ case KC_ST_UINT64: obj = [NSNumber numberWithUnsignedLongLong:*(uint64_t *)data]; break;
default: obj = @"<Unknown error occurred>"; break;
}
@@ -136,7 +131,10 @@
retval[_name] = [self objectForType:_subtype_desc.kcs_elem_type withData:&data[_subtype_desc.kcs_elem_offset]];
} else if (_subtype_desc.kcs_elem_type == KC_ST_CHAR) {
char *s = (char *)&data[_subtype_desc.kcs_elem_offset];
- retval[_name] = [NSString stringWithFormat:@"%.*s", (int)elem_count, s];
+ if (!(strnlen(s, length) < length)) {
+ return nil;
+ }
+ retval[_name] = [NSString stringWithFormat:@"%s", s];
} else {
NSMutableArray * objArray = [NSMutableArray arrayWithCapacity:elem_count];
for (unsigned int i = 0; i < elem_count; i++) {