# HG changeset patch
# User Ulf Zibis
# Date 1460547983 -7200
#      Wed Apr 13 13:46:23 2016 +0200
# Node ID 3aeea72bd5f16ef877af9a03c82cc78eca373f0a
# Parent  8fe4e9e461347828d58403298cc4dd1ab02487cd
Removed potential reference range violation and (auth < 100)

diff --git a/src/secaudit.c b/src/secaudit.c
--- a/src/secaudit.c
+++ b/src/secaudit.c
@@ -1415,25 +1415,23 @@
 
 void showsid(const char *attr, int off, const char *prefix, int level)
 {
-	int cnt;
-	int i;
-	BOOL known;
+	u8 revision;
+	u8 cnt;
 	u64 auth;
 	unsigned long first;
 	unsigned long second;
 	unsigned long last;
 	char marker;
-
-	if (opt_b)
-		marker = '#';
-	else
-		marker = ' ';
-	cnt = attr[off+1] & 255;
-	auth = get6h(attr,off+2);
-	first = get4l(attr,off+8);
+	BOOL known;
+	int i;
+
+	revision = attr[off];
+	cnt = attr[off+1];
+	auth = (u8)attr[off+7]; /* first only use <= int values for switch */
+	marker = opt_b ? '#' : ' ';
 	known = FALSE;
-	if (attr[off] == 1) /* revision */
-			&& (auth < 100)) /* switch allows only int values */
+	if (revision == 1 && cnt) {
+		first = get4l(attr,off+8);
 		switch (cnt) {
 		case 0 : /* no level (error) */
 			break;
@@ -1565,14 +1563,16 @@
 			}
 			break; /* superfluous break */
 		}
+	}
 	if (!known)
 		printf("%*cUnknown SID\n",-level,marker);
-	printf("%*c%shex S-%d-",-level,marker,prefix,attr[off] & 255);
+	auth = get6h(attr,off+2);
+	printf("%*c%shex S-%x-",-level,marker,prefix,revision);
 	printf("%llx",auth);
 	for (i=0; i<cnt; i++)
 		printf("-%lx",get4l(attr,off+8+4*i));
 	printf("\n");
-	printf("%*c%sdec S-%d-",-level,marker,prefix,attr[off] & 255);
+	printf("%*c%sdec S-%u-",-level,marker,prefix,revision);
 	printf("%llu",auth);
 	for (i=0; i<cnt; i++)
 		printf("-%lu",get4l(attr,off+8+4*i));
