Initialize digest_type to SUDO_DIGEST_INVALID, not -1 and make it unsigned.

This makes the digest type consistently unsigned instead of a mix
of signed (for the -1 value in the tokenizer) and unsigned.
This commit is contained in:
Todd C. Miller
2023-06-03 08:59:14 -06:00
parent d633d82f22
commit 1278e36ff3
8 changed files with 17 additions and 15 deletions

View File

@@ -29,7 +29,7 @@
#include "parse.h" #include "parse.h"
const char * const char *
digest_type_to_name(int digest_type) digest_type_to_name(unsigned int digest_type)
{ {
const char *digest_name; const char *digest_name;
debug_decl(digest_type_to_name, SUDOERS_DEBUG_UTIL); debug_decl(digest_type_to_name, SUDOERS_DEBUG_UTIL);

View File

@@ -34,7 +34,8 @@
#include "sudo_digest.h" #include "sudo_digest.h"
unsigned char * unsigned char *
sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_len) sudo_filedigest(int fd, const char *file, unsigned int digest_type,
size_t *digest_len)
{ {
unsigned char *file_digest = NULL; unsigned char *file_digest = NULL;
unsigned char buf[32 * 1024]; unsigned char buf[32 * 1024];
@@ -46,7 +47,7 @@ sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_len)
*digest_len = sudo_digest_getlen(digest_type); *digest_len = sudo_digest_getlen(digest_type);
if (*digest_len == (size_t)-1) { if (*digest_len == (size_t)-1) {
sudo_warnx(U_("unsupported digest type %d for %s"), digest_type, file); sudo_warnx(U_("unsupported digest type %u for %s"), digest_type, file);
goto bad; goto bad;
} }

View File

@@ -164,7 +164,7 @@ static bool add_userspec(struct member *, struct privilege *);
static struct defaults *new_default(char *, char *, short); static struct defaults *new_default(char *, char *, short);
static struct member *new_member(char *, int); static struct member *new_member(char *, int);
static struct sudo_command *new_command(char *, char *); static struct sudo_command *new_command(char *, char *);
static struct command_digest *new_digest(int, char *); static struct command_digest *new_digest(unsigned int, char *);
static void alias_error(const char *name, int errnum); static void alias_error(const char *name, int errnum);
#line 165 "gram.c" #line 165 "gram.c"
@@ -3548,7 +3548,7 @@ new_command(char *cmnd, char *args)
} }
static struct command_digest * static struct command_digest *
new_digest(int digest_type, char *digest_str) new_digest(unsigned int digest_type, char *digest_str)
{ {
struct command_digest *digest; struct command_digest *digest;
debug_decl(new_digest, SUDOERS_DEBUG_PARSER); debug_decl(new_digest, SUDOERS_DEBUG_PARSER);

View File

@@ -81,7 +81,7 @@ static bool add_userspec(struct member *, struct privilege *);
static struct defaults *new_default(char *, char *, short); static struct defaults *new_default(char *, char *, short);
static struct member *new_member(char *, int); static struct member *new_member(char *, int);
static struct sudo_command *new_command(char *, char *); static struct sudo_command *new_command(char *, char *);
static struct command_digest *new_digest(int, char *); static struct command_digest *new_digest(unsigned int, char *);
static void alias_error(const char *name, int errnum); static void alias_error(const char *name, int errnum);
%} %}
@@ -1365,7 +1365,7 @@ new_command(char *cmnd, char *args)
} }
static struct command_digest * static struct command_digest *
new_digest(int digest_type, char *digest_str) new_digest(unsigned int digest_type, char *digest_str)
{ {
struct command_digest *digest; struct command_digest *digest;
debug_decl(new_digest, SUDOERS_DEBUG_PARSER); debug_decl(new_digest, SUDOERS_DEBUG_PARSER);

View File

@@ -466,10 +466,10 @@ int parse_timeout(const char *timestr);
time_t parse_gentime(const char *expstr); time_t parse_gentime(const char *expstr);
/* filedigest.c */ /* filedigest.c */
unsigned char *sudo_filedigest(int fd, const char *file, int digest_type, size_t *digest_len); unsigned char *sudo_filedigest(int fd, const char *file, unsigned int digest_type, size_t *digest_len);
/* digestname.c */ /* digestname.c */
const char *digest_type_to_name(int digest_type); const char *digest_type_to_name(unsigned int digest_type);
/* parse.c */ /* parse.c */
struct sudo_nss_list; struct sudo_nss_list;

View File

@@ -46,7 +46,8 @@ static const char *test_strings[NUM_TESTS] = {
}; };
static unsigned char * static unsigned char *
check_digest(int digest_type, const char *buf, size_t buflen, size_t *digest_len) check_digest(unsigned int digest_type, const char *buf, size_t buflen,
size_t *digest_len)
{ {
char tfile[] = "digest.XXXXXX"; char tfile[] = "digest.XXXXXX";
unsigned char *digest = NULL; unsigned char *digest = NULL;
@@ -86,7 +87,7 @@ main(int argc, char *argv[])
unsigned char *digest; unsigned char *digest;
unsigned int i, j; unsigned int i, j;
size_t digest_len; size_t digest_len;
int digest_type; unsigned int digest_type;
initprogname(argc > 0 ? argv[0] : "check_digest"); initprogname(argc > 0 ? argv[0] : "check_digest");

View File

@@ -3095,7 +3095,7 @@ struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */
static bool continued, sawspace; static bool continued, sawspace;
static int prev_state; static int prev_state;
static int digest_type = -1; static unsigned int digest_type = SUDO_DIGEST_INVALID;
static bool pop_include(void); static bool pop_include(void);
static yy_size_t sudoers_input(char *buf, yy_size_t max_size); static yy_size_t sudoers_input(char *buf, yy_size_t max_size);
@@ -5654,7 +5654,7 @@ init_lexer(void)
keepopen = false; keepopen = false;
sawspace = false; sawspace = false;
continued = false; continued = false;
digest_type = -1; digest_type = SUDO_DIGEST_INVALID;
prev_state = INITIAL; prev_state = INITIAL;
BEGIN INITIAL; BEGIN INITIAL;

View File

@@ -61,7 +61,7 @@ struct sudolinebuf sudolinebuf; /* sudoers line being parsed. */
static bool continued, sawspace; static bool continued, sawspace;
static int prev_state; static int prev_state;
static int digest_type = -1; static unsigned int digest_type = SUDO_DIGEST_INVALID;
static bool pop_include(void); static bool pop_include(void);
static yy_size_t sudoers_input(char *buf, yy_size_t max_size); static yy_size_t sudoers_input(char *buf, yy_size_t max_size);
@@ -1107,7 +1107,7 @@ init_lexer(void)
keepopen = false; keepopen = false;
sawspace = false; sawspace = false;
continued = false; continued = false;
digest_type = -1; digest_type = SUDO_DIGEST_INVALID;
prev_state = INITIAL; prev_state = INITIAL;
BEGIN INITIAL; BEGIN INITIAL;