Use sudoersrestart() in fuzz_sudoers.c
Since we run the parser multiple times we need to restart it each time.
This commit is contained in:
@@ -40,13 +40,15 @@ open_sudoers(const char *file, bool doedit, bool *keepopen)
|
|||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
/* Don't waste time fuzzing tiny inputs. */
|
/* Don't waste time fuzzing tiny inputs. */
|
||||||
if (size < 5)
|
if (size < 5)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Operate in-memory. */
|
/* Operate in-memory. */
|
||||||
sudoersin = fmemopen((void *)data, size, "r");
|
fp = fmemopen((void *)data, size, "r");
|
||||||
if (sudoersin == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Parser needs user_shost for the %h escape in @include expansion. */
|
/* Parser needs user_shost for the %h escape in @include expansion. */
|
||||||
@@ -55,12 +57,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
|||||||
/* Initialize defaults and parse sudoers. */
|
/* Initialize defaults and parse sudoers. */
|
||||||
init_defaults();
|
init_defaults();
|
||||||
init_parser("sudoers", false, true);
|
init_parser("sudoers", false, true);
|
||||||
|
sudoersrestart(fp);
|
||||||
sudoersparse();
|
sudoersparse();
|
||||||
|
|
||||||
/* Cleanup. */
|
/* Cleanup. */
|
||||||
init_parser(NULL, false, true);
|
init_parser(NULL, false, true);
|
||||||
fclose(sudoersin);
|
fclose(fp);
|
||||||
sudoersin = NULL;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -314,6 +314,7 @@ extern bool sudoers_strict;
|
|||||||
|
|
||||||
/* toke.l */
|
/* toke.l */
|
||||||
YY_DECL;
|
YY_DECL;
|
||||||
|
void sudoersrestart(FILE *);
|
||||||
extern FILE *sudoersin;
|
extern FILE *sudoersin;
|
||||||
extern const char *sudoers_file;
|
extern const char *sudoers_file;
|
||||||
extern char *sudoers;
|
extern char *sudoers;
|
||||||
|
@@ -100,7 +100,6 @@ static void usage(int);
|
|||||||
static void visudo_cleanup(void);
|
static void visudo_cleanup(void);
|
||||||
|
|
||||||
extern void get_hostname(void);
|
extern void get_hostname(void);
|
||||||
extern void sudoersrestart(FILE *);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Globals
|
* Globals
|
||||||
|
Reference in New Issue
Block a user