commit - e3b2a0f8de7210c4d403cf4c30d956c34d8c9353
commit + 391825e3604deef4c9dc3267dc2b6c89fc79958a
blob - 6f349a6e9c8f799f41fbb923a691a51e01ca22a6
blob + 5d6e1ccfe673ffdfe180f6d061a6cd7ed0266fe3
--- gmid.c
+++ gmid.c
imsg_compose(&logibuf, IMSG_QUIT, 0, 0, -1, NULL, 0);
imsg_flush(&logibuf);
+}
+
+static int
+parse_portno(const char *p)
+{
+ const char *errstr;
+ int n;
+
+ n = strtonum(p, 0, UINT16_MAX, &errstr);
+ if (errstr != NULL)
+ yyerror("port number is %s: %s", errstr, p);
+ return n;
}
int
blob - 97870df22dc9188ddc84f311a0733f6da6524499
blob + 9a066562252414ad448170053460acc526f27e28
--- gmid.h
+++ gmid.h
void drop_priv(void);
void yyerror(const char*, ...);
-int parse_portno(const char*);
void parse_conf(const char*);
int cmdline_symset(char *);
blob - b656f6b43d3825a1462e57e84c751704376a0f2d
blob + 35a918a70de6d82089057c1cfd41193faadf5d8d
--- parse.y
+++ parse.y
struct vhost *new_vhost(void);
struct location *new_location(void);
-int parse_portno(const char*);
char *ensure_absolute_path(char*);
int check_block_code(int);
char *check_block_fmt(char*);
int check_strip_no(int);
+int check_port_num(int);
int check_prefork_num(int);
void advance_loc(void);
void only_once(const void*, const char*);
add_mime(&conf.mime, $2, $3);
}
| TMAP string TTOEXT string { add_mime(&conf.mime, $2, $4); }
- | TPORT NUM { conf.port = $2; }
+ | TPORT NUM { conf.port = check_port_num($2); }
| TPREFORK NUM { conf.prefork = check_prefork_num($2); }
| TPROTOCOLS string {
if (tls_config_parse_protocols(&conf.protos, $2) == -1)
l->dirfd = -1;
l->fcgi = -1;
return l;
-}
-
-int
-parse_portno(const char *p)
-{
- const char *errstr;
- int n;
-
- n = strtonum(p, 0, UINT16_MAX, &errstr);
- if (errstr != NULL)
- yyerror("port number is %s: %s", errstr, p);
- return n;
}
char *
}
int
+check_port_num(int n)
+{
+ if (n <= 0 || n >= UINT16_MAX)
+ yyerror("port number is %s: %d",
+ n <= 0 ? "too small" : "too large",
+ n);
+ return n;
+}
+
+int
check_prefork_num(int n)
{
if (n <= 0 || n >= PROC_MAX)