Merge pull request #4402 from mugitya03/tests

Release resources in error paths via cleanup
This commit is contained in:
Yann Collet
2025-06-21 11:33:44 -07:00
committed by GitHub
2 changed files with 33 additions and 59 deletions
+30 -56
View File
@@ -70,61 +70,38 @@ int main(int argc, const char** argv)
char* buffer = (char*)malloc(bufferSize); char* buffer = (char*)malloc(bufferSize);
void* out = malloc(outSize); void* out = malloc(outSize);
void* roundtrip = malloc(dataSize); void* roundtrip = malloc(dataSize);
int _exit_code = 1;
(void)argc; (void)argc;
(void)argv; (void)argv;
int _exit_code = 0;
if (!buffer || !out || !roundtrip || !cctx || !dctx) { if (!buffer || !out || !roundtrip || !cctx || !dctx) {
fprintf(stderr, "Allocation failure\n"); fprintf(stderr, "Allocation failure\n");
_exit_code = 1; goto cleanup;
goto _cleanup;
} }
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, 31))) { if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_windowLog, 31)))
_exit_code = 1; goto cleanup;
goto _cleanup; if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers, 1)))
} goto cleanup;
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers, 1))) { if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_overlapLog, 9)))
_exit_code = 1; goto cleanup;
goto _cleanup; if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1)))
} goto cleanup;
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_overlapLog, 9))) { if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_strategy, ZSTD_btopt)))
_exit_code = 1; goto cleanup;
goto _cleanup; if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_targetLength, 7)))
} goto cleanup;
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1))) { if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_minMatch, 7)))
_exit_code = 1; goto cleanup;
goto _cleanup; if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_searchLog, 1)))
} goto cleanup;
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_strategy, ZSTD_btopt))) { if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_hashLog, 10)))
_exit_code = 1; goto cleanup;
goto _cleanup; if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_chainLog, 10)))
} goto cleanup;
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_targetLength, 7))) {
_exit_code = 1;
goto _cleanup;
}
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_minMatch, 7))) {
_exit_code = 1;
goto _cleanup;
}
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_searchLog, 1))) {
_exit_code = 1;
goto _cleanup;
}
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_hashLog, 10))) {
_exit_code = 1;
goto _cleanup;
}
if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, ZSTD_c_chainLog, 10))) {
_exit_code = 1;
goto _cleanup;
}
if (ZSTD_isError(ZSTD_DCtx_setParameter(dctx, ZSTD_d_windowLogMax, 31))) { if (ZSTD_isError(ZSTD_DCtx_setParameter(dctx, ZSTD_d_windowLogMax, 31)))
_exit_code = 1; goto cleanup;
goto _cleanup;
}
RDG_genBuffer(buffer, bufferSize, 1.0, 0.0, 0xbeefcafe); RDG_genBuffer(buffer, bufferSize, 1.0, 0.0, 0xbeefcafe);
@@ -133,21 +110,18 @@ int main(int argc, const char** argv)
int i; int i;
for (i = 0; i < 10; ++i) { for (i = 0; i < 10; ++i) {
fprintf(stderr, "Compressing 1 GB\n"); fprintf(stderr, "Compressing 1 GB\n");
if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_continue)) { if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_continue))
_exit_code = 1; goto cleanup;
goto _cleanup;
}
} }
} }
fprintf(stderr, "Compressing 1 GB\n"); fprintf(stderr, "Compressing 1 GB\n");
if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_end)) { if (compress(cctx, dctx, out, outSize, buffer, dataSize, roundtrip, ZSTD_e_end))
_exit_code = 1; goto cleanup;
goto _cleanup;
}
_exit_code = 0;
fprintf(stderr, "Success!\n"); fprintf(stderr, "Success!\n");
_cleanup: cleanup:
free(roundtrip); free(roundtrip);
free(out); free(out);
free(buffer); free(buffer);
+3 -3
View File
@@ -159,15 +159,15 @@ static result_t compress_cctx_compress(
return result_error(result_error_skip); return result_error(result_error_skip);
int const level = config_get_level(config); int const level = config_get_level(config);
result_t result;
ZSTD_CCtx* cctx = ZSTD_createCCtx(); ZSTD_CCtx* cctx = ZSTD_createCCtx();
ZSTD_DCtx* dctx = ZSTD_createDCtx(); ZSTD_DCtx* dctx = ZSTD_createDCtx();
if (cctx == NULL || dctx == NULL) { if (cctx == NULL || dctx == NULL) {
fprintf(stderr, "context creation failed\n"); fprintf(stderr, "context creation failed\n");
return result_error(result_error_system_error); result = result_error(result_error_system_error);
goto out;
} }
result_t result;
result_data_t data = {.total_size = 0}; result_data_t data = {.total_size = 0};
for (size_t i = 0; i < state->inputs.size; ++i) { for (size_t i = 0; i < state->inputs.size; ++i) {
data_buffer_t const input = state->inputs.buffers[i]; data_buffer_t const input = state->inputs.buffers[i];