apps/speed.c:2282: error: NULL_DEREFERENCE
  pointer `fds` last assigned on line 2272 could be null and is dereferenced at line 2282, column 13.
Showing all 16 steps of the trace


apps/speed.c:2265:1: start of procedure do_multi()
2263.   }
2264.   
2265. > static int do_multi(int multi)
2266.   {
2267.       int n;

apps/speed.c:2270:5: 
2268.       int fd[2];
2269.       int *fds;
2270. >     static char sep[] = ":";
2271.   
2272.       fds = malloc(sizeof(*fds) * multi);

apps/speed.c:2272:5: 
2270.       static char sep[] = ":";
2271.   
2272. >     fds = malloc(sizeof(*fds) * multi);
2273.       for (n = 0; n < multi; ++n) {
2274.           if (pipe(fd) == -1) {

apps/speed.c:2273:10: 
2271.   
2272.       fds = malloc(sizeof(*fds) * multi);
2273. >     for (n = 0; n < multi; ++n) {
2274.           if (pipe(fd) == -1) {
2275.               BIO_printf(bio_err, "pipe failure\n");

apps/speed.c:2273:17: Loop condition is true. Entering loop body
2271.   
2272.       fds = malloc(sizeof(*fds) * multi);
2273.       for (n = 0; n < multi; ++n) {
                        ^
2274.           if (pipe(fd) == -1) {
2275.               BIO_printf(bio_err, "pipe failure\n");

apps/speed.c:2274:13: Taking false branch
2272.       fds = malloc(sizeof(*fds) * multi);
2273.       for (n = 0; n < multi; ++n) {
2274.           if (pipe(fd) == -1) {
                    ^
2275.               BIO_printf(bio_err, "pipe failure\n");
2276.               exit(1);

apps/speed.c:2278:9: 
2276.               exit(1);
2277.           }
2278. >         fflush(stdout);
2279.           (void)BIO_flush(bio_err);
2280.           if (fork()) {

apps/speed.c:2279:15: 
2277.           }
2278.           fflush(stdout);
2279. >         (void)BIO_flush(bio_err);
2280.           if (fork()) {
2281.               close(fd[1]);

crypto/bio/bio_lib.c:338:1: start of procedure BIO_ctrl()
  336.   }
  337.   
  338. > long BIO_ctrl(BIO *b, int cmd, long larg, void *parg)
  339.   {
  340.       long ret;

crypto/bio/bio_lib.c:343:9: Taking true branch
  341.       long (*cb) (BIO *, int, const char *, int, long, long);
  342.   
  343.       if (b == NULL)
                 ^
  344.           return (0);
  345.   

crypto/bio/bio_lib.c:344:9: 
  342.   
  343.       if (b == NULL)
  344. >         return (0);
  345.   
  346.       if ((b->method == NULL) || (b->method->ctrl == NULL)) {

crypto/bio/bio_lib.c:362:1: return from a call to BIO_ctrl
  360.           ret = cb(b, BIO_CB_CTRL | BIO_CB_RETURN, parg, cmd, larg, ret);
  361.       return (ret);
  362. > }
  363.   
  364.   long BIO_callback_ctrl(BIO *b, int cmd,

apps/speed.c:2279:9: 
2277.           }
2278.           fflush(stdout);
2279. >         (void)BIO_flush(bio_err);
2280.           if (fork()) {
2281.               close(fd[1]);

apps/speed.c:2280:13: Taking true branch
2278.           fflush(stdout);
2279.           (void)BIO_flush(bio_err);
2280.           if (fork()) {
                    ^
2281.               close(fd[1]);
2282.               fds[n] = fd[0];

apps/speed.c:2281:13: 
2279.           (void)BIO_flush(bio_err);
2280.           if (fork()) {
2281. >             close(fd[1]);
2282.               fds[n] = fd[0];
2283.           } else {

apps/speed.c:2282:13: 
2280.           if (fork()) {
2281.               close(fd[1]);
2282. >             fds[n] = fd[0];
2283.           } else {
2284.               close(fd[0]);
