Back to success stories

Sample of Defect

Project Name CID Checker Category Developer Description
TeskaLabs/Frame_Transporter 1354182 MISSING_BREAK Control flow issues This one is pretty awesome. It is a corner case that would flash once in the blue moon - but with serious impact on the production availability. This one alone justified all the effort put into coverity integration.
File: /src/sock/stream.c
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
                int rc = shutdown(this->write_watcher.fd, SHUT_RDWR);
                if ((rc != 0) && ( errno != ENOTCONN)) FT_WARN_ERRNO_P(errno, "shutdown()");

                FT_TRACE(FT_TRACE_ID_STREAM, "END " TRACE_FMT " completed", TRACE_ARGS);
                return;
        }

        int errno_ssl_cmd = errno;
        int ssl_err = SSL_get_error(this->ssl, rc);
        switch (ssl_err)
        {
                case SSL_ERROR_WANT_READ:
                        _ft_stream_read_set_event(this, SSL_SHUTDOWN_WANT_READ);
                        _ft_stream_write_unset_event(this, SSL_SHUTDOWN_WANT_WRITE);
                        FT_TRACE(FT_TRACE_ID_STREAM, "END " TRACE_FMT " SSL_SHUTDOWN_WANT_READ", TRACE_ARGS);
                        return;

                case SSL_ERROR_WANT_WRITE:
                        _ft_stream_read_unset_event(this, SSL_SHUTDOWN_WANT_READ);
                        _ft_stream_write_set_event(this, SSL_SHUTDOWN_WANT_WRITE);
                        FT_TRACE(FT_TRACE_ID_STREAM, "END " TRACE_FMT " SSL_SHUTDOWN_WANT_WRITE", TRACE_ARGS);
                        return;

 <<< CID 1354182: Control flow issues MISSING_BREAK
 <<< The case for value "1" is not terminated by a 'break' statement.
1240
1241
1242
1243
1244
1245
1246
1247
                case SSL_ERROR_SSL:
                        {
                                unsigned long ssl_err_tmp = ERR_peek_error();
                                FT_ERROR_OPENSSL_P("Unexpected error %d  during SSL shutdown, closing", ssl_err);
                                assert(errno_ssl_cmd == 0);
                                _ft_stream_error(this, 0, ssl_err_tmp, "SSL shutdown (unknown)");
                        }
                        FT_TRACE(FT_TRACE_ID_STREAM, "END " TRACE_FMT " unknown", TRACE_ARGS);
 << The above case falls through to this one.
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
                case SSL_ERROR_ZERO_RETURN:
                case SSL_ERROR_SYSCALL:
                default:
                        // What to do here ...
                        FT_ERROR_P("Unexpected error %d  during SSL shutdown, closing", ssl_err);
                        _ft_stream_error(this, errno_ssl_cmd == 0 ? ECONNRESET : errno_ssl_cmd, 0UL, "SSL shutdown (unknown)");
                        FT_TRACE(FT_TRACE_ID_STREAM, "END " TRACE_FMT " unknown", TRACE_ARGS);
                        return;
        }

}

///

static void _ft_stream_on_read(struct ev_loop * loop, struct ev_io * watcher, int revents)
{
        struct ft_stream * this = watcher->data;
        assert(this != NULL);

        FT_TRACE(FT_TRACE_ID_STREAM, "BEGIN " TRACE_FMT " e:%x ei:%u", TRACE_ARGS, revents, ev_iteration(loop));

        if ((revents & EV_ERROR) != 0)
        {
                _ft_stream_error(this, ECONNRESET, 0UL, "reading (libev)");
                goto end;
        }
Events:
fallthrough stream.c:1249
unterminated_case stream.c:1240