39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
#include <stdarg.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <pwd.h>
/*
* Determine if the C compiler supports C11 atomics
*/
#if __STDC_VERSION__ >= 201112L
# ifndef __STDC_NO_ATOMICS__
# define FILED_FEATURE_C11_ATOMICS 1
# endif
#endif
/*
* If the C compiler does not support C11 atomics, disable TIMEOUT support
* since it relies upon it
*/
#ifndef FILED_FEATURE_C11_ATOMICS
# define FILED_DONT_TIMEOUT 1
#endif
/*
* These headers are only required for TIMEOUT support
*/
#ifndef FILED_DONT_TIMEOUT
#include <stdatomic.h>
#include <stdbool.h>
#endif
/* Compile time constants */
#define FILED_VERSION "1.19"
#define FILED_SENDFILE_MAX 16777215
#define FILED_MAX_FAILURE_COUNT 30
#define FILED_DEFAULT_TYPE "application/octet-stream"
#define FILED_PATH_BUFFER_SIZE 1010
/* Default values */
#define PORT 80
#define THREAD_COUNT 5
#define BIND_ADDR "::"
#define CACHE_SIZE 8209
#define LOG_FILE "-"
/* Fuzzing Test Code */
#ifdef FILED_TEST_AFL
#define FILED_DONT_LOG 1
#define FILED_DONT_TIMEOUT 1
#define pthread_create(a, x, y, z) afl_pthread_create(a, x, y, z)
#define bind(x, y, z) afl_bind(x, y, z)
#define socket(x, y, z) 8193
#define listen(x, y) 0
#define accept(x, y, z) afl_accept(x, y, z)
#define close(x) { if (strcmp(#x, "random_fd") == 0) { close(x); } else { exit(0); } }
#define fclose(x) exit(0)
|
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
|
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
|
-
+
-
-
-
+
+
+
|
#define filed_sockettimeout_thread_init() 0
#define filed_sockettimeout_init() 0
#define filed_sockettimeout_accept(x) /**/
#define filed_sockettimeout_processing_start(x) /**/
#define filed_sockettimeout_processing_end(x) /**/
#define filed_sockettimeout_close(x) /**/
#else
_Atomic time_t filed_sockettimeout_time;
time_t filed_sockettimeout_time;
struct {
_Atomic time_t expiration_time;
_Atomic pthread_t thread_id;
bool valid;
time_t expiration_time;
pthread_t thread_id;
int valid;
}* filed_sockettimeout_sockstatus;
long filed_sockettimeout_sockstatus_length;
int filed_sockettimeout_devnull_fd;
static int filed_sockettimeout_sockfd_in_range(int sockfd) {
if (sockfd < 3) {
return(0);
|
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
|
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
|
-
+
|
}
static void *filed_sockettimeout_thread(void *arg) {
time_t now, expiration_time;
pthread_t thread_id;
long idx;
int count;
bool valid;
int valid;
while (1) {
for (count = 0; count < 10; count++) {
usleep(30000000);
now = time(NULL);
|