Avoid reading negative constants from SourceXX, PatchXX tags
authorJindrich Novy <jnovy@redhat.com>
Tue, 1 Jul 2008 10:41:35 +0000 (12:41 +0200)
committerJindrich Novy <jnovy@redhat.com>
Tue, 1 Jul 2008 10:54:12 +0000 (12:54 +0200)
- convert parseNum() to parseUnsignedNum()
- don't misleadingly declare it to return int, when the result is
  always unsigned due to strtoul() call

build/misc.c
build/rpmbuild.h

index 2097366..4be1ea5 100644 (file)
@@ -6,13 +6,24 @@
 #include <rpm/rpmbuild.h>
 #include "debug.h"
 
-int parseNum(const char * line, int * res)
+uint32_t parseUnsignedNum(char * line, uint32_t * res)
 {
     char * s1 = NULL;
     unsigned long rc;
+    uint32_t result;
 
     if (line == NULL) return 1;
+
+    while (isspace(*line)) line++;
+    if (!isdigit(*line)) return 1;
+
     rc = strtoul(line, &s1, 10);
-    if (res) *res = rc;
-    return (((*s1) || (s1 == line) || (rc == ULONG_MAX)) ? 1 : 0);
+
+    if (*s1 || s1 == line || rc == ULONG_MAX || rc > UINT_MAX)
+        return 1;
+
+    result = (uint32_t)rc;
+    if (res) *res = result;
+
+    return 0;
 }
index 2e30370..77577a7 100644 (file)
@@ -174,12 +174,12 @@ void handleComments(char * s);
 rpmParseState isPart(const char * line)        ;
 
 /** \ingroup rpmbuild
- * Parse a number.
+ * Parse an unsigned number.
  * @param              line from spec file
- * @retval res         pointer to int
+ * @retval res         pointer to uint32_t
  * @return             0 on success, 1 on failure
  */
-int parseNum(const char * line,int * res);
+uint32_t parseUnsignedNum(char * line, uint32_t * res);
 
 /** \ingroup rpmbuild
  * Add changelog entry to header.