Blame SOURCES/0220-RHBZ-1448223-fix-kpartx.patch

526b4e
---
526b4e
 kpartx/kpartx.c |   23 ++++++++++++++++-------
526b4e
 1 file changed, 16 insertions(+), 7 deletions(-)
526b4e
526b4e
Index: multipath-tools-130222/kpartx/kpartx.c
526b4e
===================================================================
526b4e
--- multipath-tools-130222.orig/kpartx/kpartx.c
526b4e
+++ multipath-tools-130222/kpartx/kpartx.c
526b4e
@@ -114,10 +114,13 @@ set_delimiter (char * device, char * del
526b4e
 {
526b4e
 	char * p = device;
526b4e
 
526b4e
-	while (*(p++) != 0x0)
526b4e
+	if (*p == 0x0)
526b4e
+		return;
526b4e
+
526b4e
+	while (*(++p) != 0x0)
526b4e
 		continue;
526b4e
 
526b4e
-	if (isdigit(*(p - 2)))
526b4e
+	if (isdigit(*(p - 1)))
526b4e
 		*delimiter = 'p';
526b4e
 }
526b4e
 
526b4e
@@ -136,15 +139,17 @@ strip_slash (char * device)
526b4e
 static int
526b4e
 find_devname_offset (char * device)
526b4e
 {
526b4e
-	char *p, *q = NULL;
526b4e
+	char *p, *q;
526b4e
 
526b4e
-	p = device;
526b4e
+	q = p = device;
526b4e
 
526b4e
-	while (*p++)
526b4e
+	while (*p) {
526b4e
 		if (*p == '/')
526b4e
-			q = p;
526b4e
+			q = p + 1;
526b4e
+		p++;
526b4e
+	}
526b4e
 
526b4e
-	return (int)(q - device) + 1;
526b4e
+	return (int)(q - device);
526b4e
 }
526b4e
 
526b4e
 static char *
526b4e
@@ -343,6 +348,10 @@ main(int argc, char **argv){
526b4e
 		}
526b4e
 		device = loopdev;
526b4e
 	}
526b4e
+	else if (!S_ISBLK(buf.st_mode)) {
526b4e
+		fprintf(stderr, "invalid device: %s\n", device);
526b4e
+		exit(1);
526b4e
+	}
526b4e
 
526b4e
 	off = find_devname_offset(device);
526b4e