parse-events: Fix segfault of print array processing

The reading of an element in an array assumed the arg was a field
type event though the arg could have been of a dynamic array type.
This caused a Seg fault when processing dynamic arrays.

Reported-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
diff --git a/parse-events.c b/parse-events.c
index 0f7b1f1..91d6788 100644
--- a/parse-events.c
+++ b/parse-events.c
@@ -2839,6 +2839,7 @@
 	struct print_arg *typearg = NULL;
 	struct print_arg *larg;
 	unsigned long offset;
+	unsigned int field_size;
 
 	switch (arg->type) {
 	case PRINT_NULL:
@@ -2885,6 +2886,9 @@
 				larg = larg->typecast.item;
 			}
 
+			/* Default to long size */
+			field_size = pevent->long_size;
+
 			switch (larg->type) {
 			case PRINT_DYNAMIC_ARRAY:
 				offset = pevent_read_number(pevent,
@@ -2905,6 +2909,7 @@
 					if (!larg->field.field)
 						die("field %s not found", larg->field.name);
 				}
+				field_size = larg->field.field->elementsize;
 				offset = larg->field.field->offset +
 					right * larg->field.field->elementsize;
 				break;
@@ -2912,7 +2917,7 @@
 				goto default_op; /* oops, all bets off */
 			}
 			val = pevent_read_number(pevent,
-						 data + offset, larg->field.field->elementsize);
+						 data + offset, field_size);
 			if (typearg)
 				val = eval_type(val, typearg, 1);
 			break;