Todd C. Miller
unread,Oct 13, 2016, 4:36:55 PM10/13/16You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to te...@openbsd.org
Quiet some sign warnings from the compiler. The common "st.st_size
> SIZE_MAX" check causes many of them. To avoid this we need to
cast st_size (which is off_t) to a large unsigned type. I think
uintmax_t makes the most sense for this.
- todd
Index: buf.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/buf.c,v
retrieving revision 1.83
diff -u -p -u -r1.83 buf.c
--- buf.c 5 Nov 2015 09:48:21 -0000 1.83
+++ buf.c 12 Oct 2016 18:18:38 -0000
@@ -106,7 +106,7 @@ buf_load_fd(int fd)
if (lseek(fd, 0, SEEK_SET) == -1)
fatal("buf_load_fd: lseek: %s", strerror(errno));
- if (st.st_size > SIZE_MAX)
+ if ((uintmax_t)st.st_size > SIZE_MAX)
fatal("buf_load_fd: file size too big");
buf = buf_alloc(st.st_size);
if (atomicio(read, fd, buf->cb_buf, buf->cb_size) != buf->cb_size)
Index: buf.h
===================================================================
RCS file: /cvs/src/usr.bin/cvs/buf.h,v
retrieving revision 1.28
diff -u -p -u -r1.28 buf.h
--- buf.h 1 Aug 2010 09:55:40 -0000 1.28
+++ buf.h 12 Oct 2016 18:10:34 -0000
@@ -30,6 +30,7 @@
#include <sys/types.h>
typedef struct buf BUF;
+struct timeval;
BUF *buf_alloc(size_t);
BUF *buf_load(const char *);
Index: diff3.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/diff3.c,v
retrieving revision 1.59
diff -u -p -u -r1.59 diff3.c
--- diff3.c 5 Nov 2015 09:48:21 -0000 1.59
+++ diff3.c 12 Oct 2016 18:21:38 -0000
@@ -295,7 +295,8 @@ diff3_internal(int argc, char **argv, co
free(overlap);
free(de);
- de = d13 = d23 = overlap = NULL;
+ de = d13 = d23 = NULL;
+ overlap = NULL;
increase();
@@ -793,7 +794,7 @@ edscript(int n)
(void)fseek(fp[2], (long)de[n].new.from, SEEK_SET);
for (k = de[n].new.to-de[n].new.from; k > 0; k-= j) {
j = k > BUFSIZ ? BUFSIZ : k;
- if (fread(block, 1, j, fp[2]) != j)
+ if (fread(block, 1, j, fp[2]) != (size_t)j)
return (-1);
block[j] = '\0';
diff_output("%s", block);
Index: diff_internals.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/diff_internals.c,v
retrieving revision 1.38
diff -u -p -u -r1.38 diff_internals.c
--- diff_internals.c 5 Nov 2015 09:48:21 -0000 1.38
+++ diff_internals.c 12 Oct 2016 18:22:48 -0000
@@ -455,13 +455,13 @@ prepare(int i, FILE *fd, off_t filesize,
rewind(fd);
- sz = (filesize <= SIZE_MAX ? filesize : SIZE_MAX) / 25;
+ sz = ((uintmax_t)filesize <= SIZE_MAX ? (size_t)filesize : SIZE_MAX) / 25;
if (sz < 100)
sz = 100;
p = xcalloc(sz + 3, sizeof(*p));
for (j = 0; (h = readhash(fd, flags));) {
- if (j == sz) {
+ if ((size_t)j == sz) {
sz = sz * 3 / 2;
p = xreallocarray(p, sz + 3, sizeof(*p));
}
Index: file.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/file.c,v
retrieving revision 1.267
diff -u -p -u -r1.267 file.c
--- file.c 5 Nov 2015 09:48:21 -0000 1.267
+++ file.c 12 Oct 2016 18:25:47 -0000
@@ -461,12 +461,13 @@ cvs_file_walkdir(struct cvs_file *cf, st
fatal("cvs_file_walkdir: %s %s", cf->file_path,
strerror(errno));
- if (st.st_size > SIZE_MAX)
+ if ((uintmax_t)st.st_size > SIZE_MAX)
fatal("cvs_file_walkdir: %s: file size too big", cf->file_name);
- bufsize = st.st_size;
- if (bufsize < st.st_blksize)
+ if (st.st_size < st.st_blksize)
bufsize = st.st_blksize;
+ else
+ bufsize = st.st_size;
buf = xmalloc(bufsize);
RB_INIT(&fl);
@@ -1032,7 +1033,7 @@ cvs_file_cmp(const char *file1, const ch
if (S_ISREG(stb1.st_mode)) {
void *p1, *p2;
- if (stb1.st_size > SIZE_MAX) {
+ if ((uintmax_t)stb1.st_size > SIZE_MAX) {
ret = 1;
goto out;
}
@@ -1089,7 +1090,7 @@ cvs_file_copy(const char *from, const ch
char *p;
int saved_errno;
- if (st.st_size > SIZE_MAX) {
+ if ((uintmax_t)st.st_size > SIZE_MAX) {
ret = -1;
goto out;
}
@@ -1108,7 +1109,7 @@ cvs_file_copy(const char *from, const ch
madvise(p, st.st_size, MADV_SEQUENTIAL);
- if (atomicio(vwrite, dst, p, st.st_size) != st.st_size) {
+ if (atomicio(vwrite, dst, p, st.st_size) != (size_t)st.st_size) {
saved_errno = errno;
(void)unlink(to);
fatal("cvs_file_copy: `%s': %s", from,
Index: getlog.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/getlog.c,v
retrieving revision 1.98
diff -u -p -u -r1.98 getlog.c
--- getlog.c 1 Dec 2014 21:58:46 -0000 1.98
+++ getlog.c 12 Oct 2016 18:27:04 -0000
@@ -233,7 +233,7 @@ cvs_log_local(struct cvs_file *cf)
if (logrev != NULL)
nrev = cvs_revision_select(cf->file_rcs, logrev);
else if (logdate != NULL) {
- if ((nrev = date_select(cf->file_rcs, logdate)) == -1) {
+ if ((nrev = date_select(cf->file_rcs, logdate)) == (u_int)-1) {
cvs_log(LP_ERR, "invalid date: %s", logdate);
return;
}
Index: logmsg.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/logmsg.c,v
retrieving revision 1.58
diff -u -p -u -r1.58 logmsg.c
--- logmsg.c 16 Aug 2016 19:00:59 -0000 1.58
+++ logmsg.c 12 Oct 2016 18:27:35 -0000
@@ -59,7 +59,7 @@ cvs_logmsg_read(const char *path)
if ((fp = fdopen(fd, "r")) == NULL)
fatal("cvs_logmsg_read: fdopen %s", strerror(errno));
- if (st.st_size > SIZE_MAX)
+ if ((uintmax_t)st.st_size > SIZE_MAX)
fatal("cvs_logmsg_read: %s: file size too big", path);
lbuf = NULL;
@@ -142,7 +142,7 @@ cvs_logmsg_create(char *dir, struct cvs_
if ((rp = fdopen(rd, "r")) == NULL)
fatal("cvs_logmsg_create: fdopen %s",
strerror(errno));
- if (st.st_size > SIZE_MAX)
+ if ((uintmax_t)st.st_size > SIZE_MAX)
fatal("cvs_logmsg_create: %s: file size "
"too big", line->line);
logmsg = xmalloc(st.st_size);
Index: rcs.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/rcs.c,v
retrieving revision 1.313
diff -u -p -u -r1.313 rcs.c
--- rcs.c 5 Nov 2015 09:48:21 -0000 1.313
+++ rcs.c 12 Oct 2016 18:31:04 -0000
@@ -2434,7 +2434,7 @@ rcs_kwexp_line(char *rcsfile, struct rcs
"truncated");
lp = xcalloc(1, sizeof(*lp));
- xasprintf(&(lp->l_line), "%s%s\n",
+ xasprintf((char *)&(lp->l_line), "%s%s\n",
prefix, linebuf);
lp->l_len = strlen(lp->l_line);
TAILQ_INSERT_AFTER(&(lines->l_lines), cur, lp,
@@ -2448,10 +2448,10 @@ rcs_kwexp_line(char *rcsfile, struct rcs
lp = xcalloc(1, sizeof(*lp));
if (l_line[0] == '\0') {
- xasprintf(&(lp->l_line), "%s\n",
- sprefix);
+ xasprintf((char *)&(lp->l_line),
+ "%s\n", sprefix);
} else {
- xasprintf(&(lp->l_line),
+ xasprintf((char *)&(lp->l_line),
"%s%s\n", prefix, l_line);
}
Index: update.c
===================================================================
RCS file: /cvs/src/usr.bin/cvs/update.c,v
retrieving revision 1.171
diff -u -p -u -r1.171 update.c
--- update.c 5 Nov 2015 09:48:21 -0000 1.171
+++ update.c 12 Oct 2016 18:25:37 -0000
@@ -259,13 +259,14 @@ cvs_update_leavedir(struct cvs_file *cf)
if (fstat(cf->fd, &st) == -1)
fatal("cvs_update_leavedir: %s", strerror(errno));
- bufsize = st.st_size;
- if (bufsize < st.st_blksize)
- bufsize = st.st_blksize;
-
- if (st.st_size > SIZE_MAX)
+ if ((uintmax_t)st.st_size > SIZE_MAX)
fatal("cvs_update_leavedir: %s: file size too big",
cf->file_name);
+
+ if (st.st_size < st.st_blksize)
+ bufsize = st.st_blksize;
+ else
+ bufsize = st.st_size;
isempty = 1;
buf = xmalloc(bufsize);