diff options
Diffstat (limited to 'src/third_party/wiredtiger/ext')
10 files changed, 116 insertions, 37 deletions
diff --git a/src/third_party/wiredtiger/ext/collators/revint/revint_collator.c b/src/third_party/wiredtiger/ext/collators/revint/revint_collator.c index 00c8bf93acb..b080a5e4d6a 100644 --- a/src/third_party/wiredtiger/ext/collators/revint/revint_collator.c +++ b/src/third_party/wiredtiger/ext/collators/revint/revint_collator.c @@ -80,9 +80,10 @@ revint_compare(WT_COLLATOR *collator, * when comparing primary keys. */ if ((ret = wt_api->unpack_start( - wt_api, session, "ii", k1->data, k1->size, &pstream)) != 0 || - (ret = wt_api->unpack_int(wt_api, pstream, &i1)) != 0) + wt_api, session, "ii", k1->data, k1->size, &pstream)) != 0) return (ret); + if ((ret = wt_api->unpack_int(wt_api, pstream, &i1)) != 0) + goto err; if ((ret = wt_api->unpack_int(wt_api, pstream, &p1)) != 0) /* A missing primary key is OK and sorts first. */ p1 = INT64_MIN; @@ -91,9 +92,12 @@ revint_compare(WT_COLLATOR *collator, /* Unpack the second pair of numbers. */ if ((ret = wt_api->unpack_start( - wt_api, session, "ii", k2->data, k2->size, &pstream)) != 0 || - (ret = wt_api->unpack_int(wt_api, pstream, &i2)) != 0) + wt_api, session, "ii", k2->data, k2->size, &pstream)) != 0) return (ret); + if ((ret = wt_api->unpack_int(wt_api, pstream, &i2)) != 0) { +err: (void)wt_api->pack_close(wt_api, pstream, NULL); + return (ret); + } if ((ret = wt_api->unpack_int(wt_api, pstream, &p2)) != 0) /* A missing primary key is OK and sorts first. */ p2 = INT64_MIN; @@ -138,6 +142,7 @@ int wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) { REVINT_COLLATOR *revint_collator; + int ret; (void)config; /* Unused parameters */ @@ -148,6 +153,10 @@ wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) revint_collator->collator.terminate = revint_terminate; revint_collator->wt_api = connection->get_extension_api(connection); - return (connection->add_collator( - connection, "revint", &revint_collator->collator, NULL)); + if ((ret = connection->add_collator( + connection, "revint", (WT_COLLATOR *)revint_collator, NULL)) == 0) + return (0); + + free(revint_collator); + return (ret); } diff --git a/src/third_party/wiredtiger/ext/compressors/lz4/lz4_compress.c b/src/third_party/wiredtiger/ext/compressors/lz4/lz4_compress.c index 1f32ff910d6..dc90500dcdb 100644 --- a/src/third_party/wiredtiger/ext/compressors/lz4/lz4_compress.c +++ b/src/third_party/wiredtiger/ext/compressors/lz4/lz4_compress.c @@ -375,6 +375,7 @@ static int lz_add_compressor(WT_CONNECTION *connection, bool raw, const char *name) { LZ4_COMPRESSOR *lz4_compressor; + int ret; /* * There are two almost identical LZ4 compressors: one using raw @@ -392,8 +393,12 @@ lz_add_compressor(WT_CONNECTION *connection, bool raw, const char *name) lz4_compressor->wt_api = connection->get_extension_api(connection); /* Load the compressor */ - return (connection->add_compressor( - connection, name, (WT_COMPRESSOR *)lz4_compressor, NULL)); + if ((ret = connection->add_compressor( + connection, name, (WT_COMPRESSOR *)lz4_compressor, NULL)) == 0) + return (0); + + free(lz4_compressor); + return (ret); } int lz4_extension_init(WT_CONNECTION *, WT_CONFIG_ARG *); diff --git a/src/third_party/wiredtiger/ext/compressors/nop/nop_compress.c b/src/third_party/wiredtiger/ext/compressors/nop/nop_compress.c index f739ffa4777..586f6c8831b 100644 --- a/src/third_party/wiredtiger/ext/compressors/nop/nop_compress.c +++ b/src/third_party/wiredtiger/ext/compressors/nop/nop_compress.c @@ -155,6 +155,7 @@ int wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) { NOP_COMPRESSOR *nop_compressor; + int ret; (void)config; /* Unused parameters */ @@ -177,7 +178,11 @@ wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) nop_compressor->wt_api = connection->get_extension_api(connection); /* Load the compressor */ - return (connection->add_compressor( - connection, "nop", (WT_COMPRESSOR *)nop_compressor, NULL)); + if ((ret = connection->add_compressor( + connection, "nop", (WT_COMPRESSOR *)nop_compressor, NULL)) == 0) + return (0); + + free(nop_compressor); + return (ret); } /*! [WT_COMPRESSOR initialization function] */ diff --git a/src/third_party/wiredtiger/ext/compressors/snappy/snappy_compress.c b/src/third_party/wiredtiger/ext/compressors/snappy/snappy_compress.c index 26aa3082bc0..03a17d28a1b 100644 --- a/src/third_party/wiredtiger/ext/compressors/snappy/snappy_compress.c +++ b/src/third_party/wiredtiger/ext/compressors/snappy/snappy_compress.c @@ -252,6 +252,7 @@ int snappy_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) { SNAPPY_COMPRESSOR *snappy_compressor; + int ret; (void)config; /* Unused parameters */ @@ -266,8 +267,12 @@ snappy_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) snappy_compressor->wt_api = connection->get_extension_api(connection); - return (connection->add_compressor( - connection, "snappy", (WT_COMPRESSOR *)snappy_compressor, NULL)); + if ((ret = connection->add_compressor(connection, + "snappy", (WT_COMPRESSOR *)snappy_compressor, NULL)) == 0) + return (0); + + free(snappy_compressor); + return (ret); } /* diff --git a/src/third_party/wiredtiger/ext/compressors/zlib/zlib_compress.c b/src/third_party/wiredtiger/ext/compressors/zlib/zlib_compress.c index 5ae54a25163..d5c0d0fb318 100644 --- a/src/third_party/wiredtiger/ext/compressors/zlib/zlib_compress.c +++ b/src/third_party/wiredtiger/ext/compressors/zlib/zlib_compress.c @@ -452,6 +452,7 @@ zlib_add_compressor( WT_CONNECTION *connection, bool raw, const char *name, int zlib_level) { ZLIB_COMPRESSOR *zlib_compressor; + int ret; /* * There are two almost identical zlib compressors: one using raw @@ -471,8 +472,12 @@ zlib_add_compressor( zlib_compressor->zlib_level = zlib_level; /* Load the compressor. */ - return (connection->add_compressor( - connection, name, (WT_COMPRESSOR *)zlib_compressor, NULL)); + if ((ret = connection->add_compressor( + connection, name, (WT_COMPRESSOR *)zlib_compressor, NULL)) == 0) + return (0); + + free(zlib_compressor); + return (ret); } /* diff --git a/src/third_party/wiredtiger/ext/compressors/zstd/zstd_compress.c b/src/third_party/wiredtiger/ext/compressors/zstd/zstd_compress.c index 4f80694b0d1..40a872f92e2 100644 --- a/src/third_party/wiredtiger/ext/compressors/zstd/zstd_compress.c +++ b/src/third_party/wiredtiger/ext/compressors/zstd/zstd_compress.c @@ -315,8 +315,12 @@ zstd_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) zstd_compressor->compression_level = compression_level; /* Load the compressor */ - return (connection->add_compressor( - connection, "zstd", (WT_COMPRESSOR *)zstd_compressor, NULL)); + if ((ret = connection->add_compressor( + connection, "zstd", (WT_COMPRESSOR *)zstd_compressor, NULL)) == 0) + return (0); + + free(zstd_compressor); + return (ret); } /* diff --git a/src/third_party/wiredtiger/ext/encryptors/nop/nop_encrypt.c b/src/third_party/wiredtiger/ext/encryptors/nop/nop_encrypt.c index 0d04e51e395..edefab450a0 100644 --- a/src/third_party/wiredtiger/ext/encryptors/nop/nop_encrypt.c +++ b/src/third_party/wiredtiger/ext/encryptors/nop/nop_encrypt.c @@ -168,6 +168,7 @@ int wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) { NOP_ENCRYPTOR *nop_encryptor; + int ret; (void)config; /* Unused parameters */ @@ -189,7 +190,11 @@ wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) nop_encryptor->wt_api = connection->get_extension_api(connection); /* Load the encryptor */ - return (connection->add_encryptor( - connection, "nop", (WT_ENCRYPTOR *)nop_encryptor, NULL)); + if ((ret = connection->add_encryptor( + connection, "nop", (WT_ENCRYPTOR *)nop_encryptor, NULL)) == 0) + return (0); + + free(nop_encryptor); + return (ret); } /*! [WT_ENCRYPTOR initialization function] */ diff --git a/src/third_party/wiredtiger/ext/encryptors/rotn/rotn_encrypt.c b/src/third_party/wiredtiger/ext/encryptors/rotn/rotn_encrypt.c index f1e26eeaa23..6f46a950bfc 100644 --- a/src/third_party/wiredtiger/ext/encryptors/rotn/rotn_encrypt.c +++ b/src/third_party/wiredtiger/ext/encryptors/rotn/rotn_encrypt.c @@ -479,7 +479,11 @@ wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) return (ret); } /* Load the encryptor */ - return (connection->add_encryptor( - connection, "rotn", (WT_ENCRYPTOR *)rotn_encryptor, NULL)); + if ((ret = connection->add_encryptor( + connection, "rotn", (WT_ENCRYPTOR *)rotn_encryptor, NULL)) == 0) + return (0); + + free(rotn_encryptor); + return (ret); } /*! [WT_ENCRYPTOR initialization function] */ diff --git a/src/third_party/wiredtiger/ext/extractors/csv/csv_extractor.c b/src/third_party/wiredtiger/ext/extractors/csv/csv_extractor.c index 6ce64e240fe..f3c01bc3f41 100644 --- a/src/third_party/wiredtiger/ext/extractors/csv/csv_extractor.c +++ b/src/third_party/wiredtiger/ext/extractors/csv/csv_extractor.c @@ -147,7 +147,6 @@ csv_customize(WT_EXTRACTOR *extractor, WT_SESSION *session, long field_num; int ret; - (void)session; /* Unused parameters */ (void)uri; /* Unused parameters */ orig = (const CSV_EXTRACTOR *)extractor; @@ -155,34 +154,61 @@ csv_customize(WT_EXTRACTOR *extractor, WT_SESSION *session, if ((ret = wt_api->config_parser_open(wt_api, session, appcfg->str, appcfg->len, &parser)) != 0) return (ret); - if ((ret = parser->get(parser, "field", &field)) != 0 || - (ret = parser->get(parser, "format", &format)) != 0) { - if (ret == WT_NOTFOUND) { + if ((ret = parser->get(parser, "field", &field)) != 0) { + if (ret == WT_NOTFOUND) (void)wt_api->err_printf( - wt_api, session, "field or format not found"); - return (WT_NOTFOUND); - } - return (ret); + wt_api, session, "field not found"); + else + (void)wt_api->err_printf( + wt_api, session, "WT_CONFIG_PARSER.get: field: %s", + wt_api->strerror(wt_api, session, ret)); + goto err; + } + if ((ret = parser->get(parser, "format", &format)) != 0) { + if (ret == WT_NOTFOUND) + (void)wt_api->err_printf( + wt_api, session, "format not found"); + else + (void)wt_api->err_printf( + wt_api, session, "WT_CONFIG_PARSER.get: format: %s", + wt_api->strerror(wt_api, session, ret)); + goto err; + } + ret = parser->close(parser); + parser = NULL; + if (ret != 0) { + (void)wt_api->err_printf( + wt_api, session, "WT_CONFIG_PARSER.close: %s", + wt_api->strerror(wt_api, session, ret)); } + field_num = strtol(field.str, NULL, 10); if (field_num < 0 || field_num > INT_MAX) { (void)wt_api->err_printf( wt_api, session, "field: invalid format"); - return (EINVAL); + ret = EINVAL; + goto err; } if (format.len != 1 || (format.str[0] != 'S' && format.str[0] != 'i')) { (void)wt_api->err_printf( wt_api, session, "format: invalid format"); - return (EINVAL); + ret = EINVAL; + goto err; + } + if ((csv_extractor = calloc(1, sizeof(CSV_EXTRACTOR))) == NULL) { + ret = errno; + goto err; } - if ((csv_extractor = calloc(1, sizeof(CSV_EXTRACTOR))) == NULL) - return (errno); *csv_extractor = *orig; csv_extractor->field = (int)field_num; csv_extractor->format_isnum = (format.str[0] == 'i'); *customp = (WT_EXTRACTOR *)csv_extractor; return (0); + +err: if (parser != NULL) + (void)parser->close(parser); + return (ret); } /* @@ -207,6 +233,7 @@ int wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) { CSV_EXTRACTOR *csv_extractor; + int ret; (void)config; /* Unused parameters */ @@ -218,6 +245,10 @@ wiredtiger_extension_init(WT_CONNECTION *connection, WT_CONFIG_ARG *config) csv_extractor->extractor.terminate = csv_terminate; csv_extractor->wt_api = connection->get_extension_api(connection); - return (connection->add_extractor( - connection, "csv", (WT_EXTRACTOR *)csv_extractor, NULL)); + if ((ret = connection->add_extractor( + connection, "csv", (WT_EXTRACTOR *)csv_extractor, NULL)) == 0) + return (0); + + free(csv_extractor); + return (ret); } diff --git a/src/third_party/wiredtiger/ext/test/fail_fs/fail_fs.c b/src/third_party/wiredtiger/ext/test/fail_fs/fail_fs.c index bdb4669a637..b74144eb252 100644 --- a/src/third_party/wiredtiger/ext/test/fail_fs/fail_fs.c +++ b/src/third_party/wiredtiger/ext/test/fail_fs/fail_fs.c @@ -767,8 +767,10 @@ wiredtiger_extension_init(WT_CONNECTION *conn, WT_CONFIG_ARG *config) int64_t argval; int ret; - ret = 0; + config_parser = NULL; wtext = conn->get_extension_api(conn); + ret = 0; + if ((fail_fs = calloc(1, sizeof(FAIL_FILE_SYSTEM))) == NULL) { (void)wtext->err_printf(wtext, NULL, "fail_file_system extension_init: %s", @@ -813,7 +815,9 @@ wiredtiger_extension_init(WT_CONNECTION *conn, WT_CONFIG_ARG *config) wtext->strerror(wtext, NULL, ret)); goto err; } - if ((ret = config_parser->close(config_parser)) != 0) { + ret = config_parser->close(config_parser); + config_parser = NULL; + if (ret != 0) { (void)wtext->err_printf(wtext, NULL, "WT_CONFIG_PARSER.close: config: %s", wtext->strerror(wtext, NULL, ret)); @@ -840,6 +844,8 @@ wiredtiger_extension_init(WT_CONNECTION *conn, WT_CONFIG_ARG *config) } return (0); -err: free(fail_fs); +err: if (config_parser != NULL) + (void)config_parser->close(config_parser); + free(fail_fs); return (ret); } |