about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--Src/exec.c2
-rw-r--r--Src/init.c5
-rw-r--r--Src/params.c6
-rw-r--r--Src/utils.c2
5 files changed, 12 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 316c6b484..c67d53356 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2019-05-20  Oliver Kiddle  <okiddle@yahoo.co.uk>
 
+	* 44307: Src/exec.c, Src/init.c, Src/params.c, Src/utils.c:
+	allow for atoi() returning a negative number
+
 	* 44308: Completion/Linux/Command/_modutils: update Linux
 	modutils completion
 
diff --git a/Src/exec.c b/Src/exec.c
index 6ac852112..60ab0acf8 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -2535,7 +2535,7 @@ setunderscore(char *str)
 {
     queue_signals();
     if (str && *str) {
-	int l = strlen(str) + 1, nl = (l + 31) & ~31;
+	size_t l = strlen(str) + 1, nl = (l + 31) & ~31;
 
 	if (nl > underscorelen || (underscorelen - nl) > 64) {
 	    zfree(zunderscore, underscorelen);
diff --git a/Src/init.c b/Src/init.c
index 2d5c3296d..445cd3937 100644
--- a/Src/init.c
+++ b/Src/init.c
@@ -45,7 +45,10 @@ int noexitct = 0;
 char *zunderscore;
 
 /**/
-int underscorelen, underscoreused;
+size_t underscorelen;
+
+/**/
+int underscoreused;
 
 /* what level of sourcing we are at */
  
diff --git a/Src/params.c b/Src/params.c
index df031ab64..1859c7c12 100644
--- a/Src/params.c
+++ b/Src/params.c
@@ -2201,10 +2201,10 @@ getstrvalue(Value v)
 
     if (v->flags & VALFLAG_SUBST) {
 	if (v->pm->node.flags & (PM_LEFT|PM_RIGHT_B|PM_RIGHT_Z)) {
-	    unsigned int fwidth = v->pm->width ? v->pm->width : MB_METASTRLEN(s);
+	    size_t fwidth = v->pm->width ? (unsigned int)v->pm->width : MB_METASTRLEN(s);
 	    switch (v->pm->node.flags & (PM_LEFT | PM_RIGHT_B | PM_RIGHT_Z)) {
 		char *t, *tend;
-		unsigned int t0;
+		size_t t0;
 
 	    case PM_LEFT:
 	    case PM_LEFT | PM_RIGHT_Z:
@@ -5858,7 +5858,7 @@ printparamnode(HashNode hn, int printflags)
 		    doneminus = 0;
 		}
 		if ((pmptr->flags & PMTF_USE_WIDTH) && p->width) {
-		    printf("%d ", p->width);
+		    printf("%u ", p->width);
 		    doneminus = 0;
 		}
 	    }
diff --git a/Src/utils.c b/Src/utils.c
index 32f600858..46cf7bcf6 100644
--- a/Src/utils.c
+++ b/Src/utils.c
@@ -3336,7 +3336,7 @@ morefmt:
 	    case '.':
 	    {
 		long fnsec = nsec;
-		if (digs > 9)
+		if (digs < 0 || digs > 9)
 		    digs = 9;
 		if (ztrftimebuf(&bufsize, digs))
 		    return -1;