Loading...
libkdd/KCDBasicTypeDescription.m xnu-12377.121.6 xnu-3789.31.2
--- 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++) {