mirror of
https://github.com/mirror/wget.git
synced 2024-12-28 22:00:27 +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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int do_jump;
|
||||||
|
static jmp_buf jmpbuf;
|
||||||
#ifdef FUZZING
|
#ifdef FUZZING
|
||||||
void exit_wget(int status)
|
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
|
#endif
|
||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_FMEMOPEN
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
struct fileinfo *fi;
|
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
|
if (size > 4096) // same as max_len = ... in .options file
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
CLOSE_STDERR
|
|
||||||
|
|
||||||
fp = fmemopen((void *) data, size, "r");
|
fp = fmemopen((void *) data, size, "r");
|
||||||
if (!fp) return 0;
|
if (!fp) return 0;
|
||||||
|
|
||||||
|
CLOSE_STDERR
|
||||||
|
|
||||||
|
do_jump = 1;
|
||||||
|
|
||||||
|
if (setjmp(jmpbuf))
|
||||||
|
goto done;
|
||||||
|
|
||||||
opt.netrc = 1;
|
opt.netrc = 1;
|
||||||
|
|
||||||
user = NULL; // get first entry
|
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'
|
user = "u"; // get entry for user 'u'
|
||||||
search_netrc("x", &user, &pw, 1, fp);
|
search_netrc("x", &user, &pw, 1, fp);
|
||||||
|
|
||||||
|
done:
|
||||||
netrc_cleanup();
|
netrc_cleanup();
|
||||||
|
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
|
||||||
|
do_jump = 0;
|
||||||
|
|
||||||
RESTORE_STDERR
|
RESTORE_STDERR
|
||||||
|
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user