[lvm-devel] LVM2 ./WHATS_NEW tools/toollib.c

meyering at sourceware.org meyering at sourceware.org
Tue Sep 11 20:12:54 UTC 2007


CVSROOT:	/cvs/lvm2
Module name:	LVM2
Changes by:	meyering at sourceware.org	2007-09-11 20:12:54

Modified files:
	.              : WHATS_NEW 
	tools          : toollib.c 

Log message:
	Diagnose invalid PE values given on the pvmove command line (64-bit systems).
	
	* tools/toollib.c (xstrtouint32): New function.
	(_parse_pes): Use xstrtouint32; don't cast strtoul's unsigned
	long to uint32_t.  Detect overflow.
	
	Author: Jim Meyering <jim at meyering.net>

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/WHATS_NEW.diff?cvsroot=lvm2&r1=1.704&r2=1.705
http://sourceware.org/cgi-bin/cvsweb.cgi/LVM2/tools/toollib.c.diff?cvsroot=lvm2&r1=1.105&r2=1.106

--- LVM2/WHATS_NEW	2007/09/11 13:49:51	1.704
+++ LVM2/WHATS_NEW	2007/09/11 20:12:54	1.705
@@ -1,5 +1,6 @@
 Version 2.02.29 -
 ==================================
+  Diagnose invalid PE values given on the pvmove command line (64-bit systems).
   Include strerror string in dev_open_flags' stat failure message.
   Move guts of pvresize into library.
   Avoid error when --corelog is provided without --mirrorlog. (2.02.28)
--- LVM2/tools/toollib.c	2007/08/22 14:38:18	1.105
+++ LVM2/tools/toollib.c	2007/09/11 20:12:54	1.106
@@ -911,6 +911,18 @@
 	return 1;
 }
 
+static int xstrtouint32(const char *s, char **p, int base, uint32_t *result)
+{
+	unsigned long ul;
+
+	errno = 0;
+	ul = strtoul(s, p, base);
+	if (errno || *p == s || (uint32_t) ul != ul)
+		return -1;
+	*result = ul;
+	return 0;
+}
+
 static int _parse_pes(struct dm_pool *mem, char *c, struct list *pe_ranges,
 		      const char *pvname, uint32_t size)
 {
@@ -942,8 +954,7 @@
 
 		/* Start extent given? */
 		if (isdigit(*c)) {
-			start = (uint32_t) strtoul(c, &endptr, 10);
-			if (endptr == c)
+			if (xstrtouint32(c, &endptr, 10, &start))
 				goto error;
 			c = endptr;
 			/* Just one number given? */
@@ -954,8 +965,7 @@
 		if (*c == '-') {
 			c++;
 			if (isdigit(*c)) {
-				end = (uint32_t) strtoul(c, &endptr, 10);
-				if (endptr == c)
+				if (xstrtouint32(c, &endptr, 10, &end))
 					goto error;
 				c = endptr;
 			}




More information about the lvm-devel mailing list