version 1.92, 2014/08/05 15:29:30 |
version 1.96, 2014/08/26 11:21:40 |
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
*/ |
*/ |
#ifdef HAVE_CONFIG_H |
|
#include "config.h" |
#include "config.h" |
#endif |
|
|
|
|
#include <sys/types.h> |
|
#include <sys/time.h> |
|
|
#include <ctype.h> |
#include <ctype.h> |
#include <errno.h> |
#include <errno.h> |
#include <fcntl.h> |
#include <fcntl.h> |
Line 91 static const char *const sec_names[] = { |
|
Line 92 static const char *const sec_names[] = { |
|
"All Sections", |
"All Sections", |
"1 - General Commands", |
"1 - General Commands", |
"2 - System Calls", |
"2 - System Calls", |
"3 - Subroutines", |
"3 - Library Functions", |
"3p - Perl Subroutines", |
"3p - Perl Library", |
"4 - Special Files", |
"4 - Device Drivers", |
"5 - File Formats", |
"5 - File Formats", |
"6 - Games", |
"6 - Games", |
"7 - Macros and Conventions", |
"7 - Miscellaneous Information", |
"8 - Maintenance Commands", |
"8 - System Manager\'s Manual", |
"9 - Kernel Interface" |
"9 - Kernel Developer\'s Manual" |
}; |
}; |
static const int sec_MAX = sizeof(sec_names) / sizeof(char *); |
static const int sec_MAX = sizeof(sec_names) / sizeof(char *); |
|
|
Line 973 pg_search(const struct req *req) |
|
Line 974 pg_search(const struct req *req) |
|
|
|
search.arch = req->q.arch; |
search.arch = req->q.arch; |
search.sec = req->q.sec; |
search.sec = req->q.sec; |
search.deftype = req->q.equal ? TYPE_Nm : (TYPE_Nm | TYPE_Nd); |
search.outkey = "Nd"; |
search.flags = req->q.equal ? MANSEARCH_MAN : 0; |
search.argmode = req->q.equal ? ARG_NAME : ARG_EXPR; |
|
|
paths.sz = 1; |
paths.sz = 1; |
paths.paths = mandoc_malloc(sizeof(char *)); |
paths.paths = mandoc_malloc(sizeof(char *)); |
Line 1003 pg_search(const struct req *req) |
|
Line 1004 pg_search(const struct req *req) |
|
ep++; |
ep++; |
} |
} |
|
|
if (0 == mansearch(&search, &paths, sz, cp, "Nd", &res, &ressz)) |
if (0 == mansearch(&search, &paths, sz, cp, &res, &ressz)) |
pg_noresult(req, "You entered an invalid query."); |
pg_noresult(req, "You entered an invalid query."); |
else if (0 == ressz) |
else if (0 == ressz) |
pg_noresult(req, "No results found."); |
pg_noresult(req, "No results found."); |
|
|
main(void) |
main(void) |
{ |
{ |
struct req req; |
struct req req; |
|
struct itimerval itimer; |
const char *path; |
const char *path; |
const char *querystring; |
const char *querystring; |
int i; |
int i; |
|
|
|
/* Poor man's ReDoS mitigation. */ |
|
|
|
itimer.it_value.tv_sec = 1; |
|
itimer.it_value.tv_usec = 0; |
|
itimer.it_interval.tv_sec = 1; |
|
itimer.it_interval.tv_usec = 0; |
|
if (setitimer(ITIMER_VIRTUAL, &itimer, NULL) == -1) { |
|
fprintf(stderr, "setitimer: %s\n", strerror(errno)); |
|
pg_error_internal(); |
|
return(EXIT_FAILURE); |
|
} |
|
|
/* Scan our run-time environment. */ |
/* Scan our run-time environment. */ |
|
|