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


apps/speed.c:2283:1: start of procedure do_multi()
2281.   }
2282.   
2283. > static int do_multi(int multi)
2284.   {
2285.       int n;

apps/speed.c:2288:5: 
2286.       int fd[2];
2287.       int *fds;
2288. >     static char sep[] = ":";
2289.   
2290.       fds = malloc(sizeof(*fds) * multi);

apps/speed.c:2290:5: 
2288.       static char sep[] = ":";
2289.   
2290. >     fds = malloc(sizeof(*fds) * multi);
2291.       for (n = 0; n < multi; ++n) {
2292.           if (pipe(fd) == -1) {

apps/speed.c:2291:10: 
2289.   
2290.       fds = malloc(sizeof(*fds) * multi);
2291. >     for (n = 0; n < multi; ++n) {
2292.           if (pipe(fd) == -1) {
2293.               BIO_printf(bio_err, "pipe failure\n");

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

apps/speed.c:2292:13: Taking false branch
2290.       fds = malloc(sizeof(*fds) * multi);
2291.       for (n = 0; n < multi; ++n) {
2292.           if (pipe(fd) == -1) {
                    ^
2293.               BIO_printf(bio_err, "pipe failure\n");
2294.               exit(1);

apps/speed.c:2296:9: 
2294.               exit(1);
2295.           }
2296. >         fflush(stdout);
2297.           (void)BIO_flush(bio_err);
2298.           if (fork()) {

apps/speed.c:2297:15: 
2295.           }
2296.           fflush(stdout);
2297. >         (void)BIO_flush(bio_err);
2298.           if (fork()) {
2299.               close(fd[1]);

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

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

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

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

apps/speed.c:2297:9: 
2295.           }
2296.           fflush(stdout);
2297. >         (void)BIO_flush(bio_err);
2298.           if (fork()) {
2299.               close(fd[1]);

apps/speed.c:2298:13: Taking true branch
2296.           fflush(stdout);
2297.           (void)BIO_flush(bio_err);
2298.           if (fork()) {
                    ^
2299.               close(fd[1]);
2300.               fds[n] = fd[0];

apps/speed.c:2299:13: 
2297.           (void)BIO_flush(bio_err);
2298.           if (fork()) {
2299. >             close(fd[1]);
2300.               fds[n] = fd[0];
2301.           } else {

apps/speed.c:2300:13: 
2298.           if (fork()) {
2299.               close(fd[1]);
2300. >             fds[n] = fd[0];
2301.           } else {
2302.               close(fd[0]);
