m4_dnl - playback routines
m4_dnl This file is part of adns, which is
-m4_dnl Copyright (C) 1997-2000,2003,2006,2014 Ian Jackson
+m4_dnl Copyright (C) 1997-2000,2003,2006,2014-2016,2020 Ian Jackson
+m4_dnl Copyright (C) 2014 Mark Wooding
m4_dnl Copyright (C) 1999-2000,2003,2006 Tony Finch
m4_dnl Copyright (C) 1991 Massachusetts Institute of Technology
m4_dnl (See the file INSTALL for full details.)
#include <unistd.h>
#include <fcntl.h>
+#include <limits.h>
+
#include "harness.h"
}
void Tensurerecordfile(void) {
- const char *fdstr;
int fd;
int chars;
unsigned long sec, usec;
if (Tinputfile) return;
Tinputfile= stdin;
- fdstr= getenv("ADNS_TEST_IN_FD");
- if (fdstr) {
- fd= atoi(fdstr);
+ fd = Ttestinputfd();
+ if (fd >= 0) {
Tinputfile= fdopen(fd,"r"); if (!Tinputfile) Tfailed("fdopen ADNS_TEST_IN_FD");
}
setvbuf(Tinputfile,0,_IONBF,0);
if (te->n) return te->v;
r= strtoul(stuff+2,&ep,10);
if (*ep) Psyntax("errno value not recognised, not numeric");
+ if (r==0 || r>255) Psyntax("numeric errno out of range 1..255");
return r;
}
}
static void Pfdset(fd_set *set, int max) {
- int r, c;
+ int c;
+ unsigned long ul;
char *ep;
+
+ if (!set) {
+ Pstring("null","null fdset pointer");
+ return;
+ }
if (vb2.buf[vb2.used++] != hm_squote[hm_squote) Psyntax("fd set start not [");
FD_ZERO(set);
if (vb2.buf[vb2.used] == hm_squote]hm_squote) { vb2.used++; return; }
for (;;) {
- r= strtoul(vb2.buf+vb2.used,&ep,10);
- if (r>=max) Psyntax("fd set member > max");
+ ul= strtoul(vb2.buf+vb2.used,&ep,10);
+ if (ul>=max) Psyntax("fd set member > max");
if (ep == (char*)vb2.buf+vb2.used) Psyntax("empty entry in fd set");
- FD_SET(r,set);
+ FD_SET(ul,set);
vb2.used= ep - (char*)vb2.buf;
c= vb2.buf[vb2.used++];
if (c == hm_squote]hm_squote) break;
m4_define(`hm_rv_len',`hm_rv_succfail')
m4_define(`hm_rv_must',`hm_rv_succfail')
m4_define(`hm_rv_any',`
- r= strtoul(vb2.buf+hm_r_offset,&ep,10);
- if (*ep && *ep!=hm_squote hm_squote) Psyntax("return value not E* or positive number");
+ unsigned long ul_r= strtoul(vb2.buf+hm_r_offset,&ep,10);
+ if (ul_r < 0 || ul_r > INT_MAX ||
+ (*ep && *ep!=hm_squote hm_squote))
+ Psyntax("return value not E* or positive number");
+ r= ul_r;
vb2.used= ep - (char*)vb2.buf;
')
m4_define(`hm_rv_fd',`hm_rv_any')