#include <unistd.h>
#include <fcntl.h>
+#include <limits.h>
+
#include "harness.h"
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) {
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')