mirror of
https://github.com/mirror/wget.git
synced 2024-12-27 13:20:23 +08:00
* fuzz/wget_netrc_fuzzer.c: Fix fuzzer
This commit is contained in:
parent
acef0fb4c6
commit
ae6636a28f
@ -58,26 +58,49 @@ FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int do_jump;
|
||||
static jmp_buf jmpbuf;
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
longjmp(jmpbuf, 1);
|
||||
}
|
||||
#elif defined HAVE_DLFCN_H
|
||||
#include <dlfcn.h> // dlsym
|
||||
#ifndef RTLD_NEXT
|
||||
#define RTLD_NEXT RTLD_GLOBAL
|
||||
#endif
|
||||
void exit(int status)
|
||||
{
|
||||
if (do_jump) {
|
||||
longjmp(jmpbuf, 1);
|
||||
} else {
|
||||
void (*libc_exit)(int) = (void(*)(int)) dlsym (RTLD_NEXT, "exit");
|
||||
libc_exit(status);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
FILE *fp;
|
||||
struct fileinfo *fi;
|
||||
const char *user = NULL, *pw = NULL;
|
||||
const char *user = NULL, *pw = NULL;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
fp = fmemopen((void *) data, size, "r");
|
||||
if (!fp) return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
do_jump = 1;
|
||||
|
||||
if (setjmp(jmpbuf))
|
||||
goto done;
|
||||
|
||||
opt.netrc = 1;
|
||||
|
||||
user = NULL; // get first entry
|
||||
@ -86,11 +109,16 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
|
||||
user = "u"; // get entry for user 'u'
|
||||
search_netrc("x", &user, &pw, 1, fp);
|
||||
|
||||
done:
|
||||
netrc_cleanup();
|
||||
|
||||
fclose(fp);
|
||||
|
||||
do_jump = 0;
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user