svn commit: r344382 - stable/12/usr.bin/top
Dimitry Andric
dim at FreeBSD.org
Wed Feb 20 20:28:51 UTC 2019
Author: dim
Date: Wed Feb 20 20:28:48 2019
New Revision: 344382
URL: https://svnweb.freebsd.org/changeset/base/344382
Log:
MFC r343165 (by jhibbits):
Fix top(1) long options handling
getopt_long(3) requires the long options be terminated by a NULL block.
Without the terminator, an invalid long option results in a segmentation
fault.
Reported by: Brandon Bergren
MFC r343957:
Fix multiple warnings in usr.bin/top about discarded qualifiers from
both clang and gcc, by either constifying variables, or when that is not
possible, using __DECONST.
MFC r343958:
Fix multiple warnings in usr.bin/top about variables shadowing global
declarations from base gcc, by renaming those variables.
MFC r343959:
Fix the first couple of AddressSanitizer violations in usr.bin/top.
Avoid setting zero bytes beyond the length of the 'thisline' parameters
in i_process() and u_process(), and don't attempt to memset a negative
number of bytes.
Modified:
stable/12/usr.bin/top/Makefile
stable/12/usr.bin/top/display.c
stable/12/usr.bin/top/display.h
stable/12/usr.bin/top/machine.c
stable/12/usr.bin/top/top.c
stable/12/usr.bin/top/username.c
stable/12/usr.bin/top/utils.c
stable/12/usr.bin/top/utils.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/usr.bin/top/Makefile
==============================================================================
--- stable/12/usr.bin/top/Makefile Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/Makefile Wed Feb 20 20:28:48 2019 (r344382)
@@ -7,14 +7,5 @@ SRCS= commands.c display.c machine.c screen.c top.c \
username.c utils.c
MAN= top.1
-.if ${COMPILER_TYPE} == "gcc"
-.if ${COMPILER_VERSION} >= 50000
-CFLAGS.gcc=-Wno-error=discarded-qualifiers -Wno-error=incompatible-pointer-types
-.else #base gcc
-NO_WERROR=
-.endif
-.endif
-CFLAGS.clang=-Wno-error=incompatible-pointer-types-discards-qualifiers
-
LIBADD= ncursesw m kvm jail util sbuf
.include <bsd.prog.mk>
Modified: stable/12/usr.bin/top/display.c
==============================================================================
--- stable/12/usr.bin/top/display.c Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/display.c Wed Feb 20 20:28:48 2019 (r344382)
@@ -184,7 +184,7 @@ int
display_init(struct statics * statics)
{
int lines;
- char **pp;
+ const char * const *pp;
int *ip;
int i;
@@ -516,8 +516,8 @@ void
z_cpustates(void)
{
int i = 0;
- const char **names;
- char *thisname;
+ const char * const *names;
+ const char *thisname;
int cpu, value;
for (cpu = 0; cpu < num_cpus; cpu++) {
@@ -751,7 +751,7 @@ static int header_length;
* allocated area with the trimmed header.
*/
-const char *
+char *
trim_header(const char *text)
{
char *s;
@@ -829,7 +829,11 @@ i_process(int line, char *thisline)
}
/* truncate the line to conform to our current screen width */
- thisline[screen_width] = '\0';
+ int len = strlen(thisline);
+ if (screen_width < len)
+ {
+ thisline[screen_width] = '\0';
+ }
/* write the line out */
fputs(thisline, stdout);
@@ -839,7 +843,10 @@ i_process(int line, char *thisline)
p = stpcpy(base, thisline);
/* zero fill the rest of it */
- memset(p, 0, screen_width - (p - base));
+ if (p - base < screen_width)
+ {
+ memset(p, 0, screen_width - (p - base));
+ }
}
void
@@ -853,7 +860,11 @@ u_process(int line, char *newline)
bufferline = &screenbuf[lineindex(line)];
/* truncate the line to conform to our current screen width */
- newline[screen_width] = '\0';
+ int len = strlen(newline);
+ if (screen_width < len)
+ {
+ newline[screen_width] = '\0';
+ }
/* is line higher than we went on the last display? */
if (line >= last_hi)
@@ -878,7 +889,10 @@ u_process(int line, char *newline)
optr = stpcpy(bufferline, newline);
/* zero fill the rest of it */
- memset(optr, 0, screen_width - (optr - bufferline));
+ if (optr - bufferline < screen_width)
+ {
+ memset(optr, 0, screen_width - (optr - bufferline));
+ }
}
else
{
Modified: stable/12/usr.bin/top/display.h
==============================================================================
--- stable/12/usr.bin/top/display.h Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/display.h Wed Feb 20 20:28:48 2019 (r344382)
@@ -27,7 +27,7 @@ void i_timeofday(time_t *tod);
void i_uptime(struct timeval *bt, time_t *tod);
void new_message(int type, const char *msgfmt, ...);
int readline(char *buffer, int size, int numeric);
-const char *trim_header(const char *text);
+char *trim_header(const char *text);
void u_arc(int *stats);
void u_carc(int *stats);
void u_cpustates(int *states);
Modified: stable/12/usr.bin/top/machine.c
==============================================================================
--- stable/12/usr.bin/top/machine.c Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/machine.c Wed Feb 20 20:28:48 2019 (r344382)
@@ -618,7 +618,7 @@ get_old_proc(struct kinfo_proc *pp)
pp->ki_udata = NOPROC;
return (NULL);
}
- pp->ki_udata = oldp;
+ pp->ki_udata = __DECONST(void *, oldp);
return (oldp);
}
@@ -634,7 +634,7 @@ get_io_stats(const struct kinfo_proc *pp, long *inp, l
static struct kinfo_proc dummy;
long ret;
- oldp = get_old_proc(pp);
+ oldp = get_old_proc(__DECONST(struct kinfo_proc *, pp));
if (oldp == NULL) {
memset(&dummy, 0, sizeof(dummy));
oldp = &dummy;
Modified: stable/12/usr.bin/top/top.c
==============================================================================
--- stable/12/usr.bin/top/top.c Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/top.c Wed Feb 20 20:28:48 2019 (r344382)
@@ -110,7 +110,8 @@ static const struct option longopts[] = {
{ "uids", no_argument, NULL, 'u' },
{ "version", no_argument, NULL, 'v' },
{ "swap", no_argument, NULL, 'w' },
- { "system-idle-procs", no_argument, NULL, 'z' }
+ { "system-idle-procs", no_argument, NULL, 'z' },
+ { NULL, 0, NULL, 0 }
};
static void
@@ -218,7 +219,7 @@ end:
}
int
-main(int argc, char *argv[])
+main(int argc, const char *argv[])
{
int i;
int active_procs;
@@ -305,7 +306,7 @@ main(int argc, char *argv[])
optind = 1;
}
- while ((i = getopt_long(ac, av, "CSIHPabijJ:nquvzs:d:U:m:o:p:Ttw", longopts, NULL)) != EOF)
+ while ((i = getopt_long(ac, __DECONST(char * const *, av), "CSIHPabijJ:nquvzs:d:U:m:o:p:Ttw", longopts, NULL)) != EOF)
{
switch(i)
{
Modified: stable/12/usr.bin/top/username.c
==============================================================================
--- stable/12/usr.bin/top/username.c Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/username.c Wed Feb 20 20:28:48 2019 (r344382)
@@ -70,7 +70,7 @@ username(int uid)
}
int
-userid(char username[])
+userid(char username_[])
{
struct passwd *pwd;
@@ -78,13 +78,13 @@ userid(char username[])
but for now we just do it simply and remember just the result.
*/
- if ((pwd = getpwnam(username)) == NULL)
+ if ((pwd = getpwnam(username_)) == NULL)
{
return(-1);
}
/* enter the result in the hash table */
- enter_user(pwd->pw_uid, username, 1);
+ enter_user(pwd->pw_uid, username_, 1);
/* return our result */
return(pwd->pw_uid);
Modified: stable/12/usr.bin/top/utils.c
==============================================================================
--- stable/12/usr.bin/top/utils.c Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/utils.c Wed Feb 20 20:28:48 2019 (r344382)
@@ -146,7 +146,7 @@ string_index(const char *string, const char * const *a
* squat about quotes.
*/
-const char * const *
+const char **
argparse(char *line, int *cntp)
{
const char **ap;
@@ -292,11 +292,11 @@ char *
format_k(int64_t amt)
{
static char retarray[NUM_STRINGS][16];
- static int index = 0;
+ static int index_ = 0;
char *ret;
- ret = retarray[index];
- index = (index + 1) % NUM_STRINGS;
+ ret = retarray[index_];
+ index_ = (index_ + 1) % NUM_STRINGS;
humanize_number(ret, 6, amt * 1024, "", HN_AUTOSCALE, HN_NOSPACE);
return (ret);
}
Modified: stable/12/usr.bin/top/utils.h
==============================================================================
--- stable/12/usr.bin/top/utils.h Wed Feb 20 20:17:54 2019 (r344381)
+++ stable/12/usr.bin/top/utils.h Wed Feb 20 20:28:48 2019 (r344382)
@@ -16,7 +16,7 @@ int atoiwi(const char *);
char *itoa(unsigned int);
char *itoa7(int);
int digits(int);
-const char * const *argparse(char *, int *);
+const char **argparse(char *, int *);
long percentages(int, int *, long *, long *, long *);
const char *format_time(long);
char *format_k(int64_t);
More information about the svn-src-all
mailing list