Commit 6121ca16 authored by Nick Mathewson's avatar Nick Mathewson 🤹
Browse files

Merge remote-tracking branch 'ahf/bugs/22286' into maint-0.3.1

parents 1168e21b fcf836d2
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ memory_level(compression_level_t level)
static const char *
lzma_error_str(lzma_ret error)
{
  // LCOV_EXCL_START
  switch (error) {
    case LZMA_OK:
      return "Operation completed successfully";
@@ -74,6 +75,7 @@ lzma_error_str(lzma_ret error)
    default:
      return "Unknown LZMA error";
  }
  // LCOV_EXCL_STOP
}
#endif // HAVE_LZMA.

@@ -144,9 +146,11 @@ tor_lzma_state_size_precalc(int compress, compression_level_t level)
    memory_usage = lzma_easy_decoder_memusage(memory_level(level));

  if (memory_usage == UINT64_MAX) {
    // LCOV_EXCL_START
    log_warn(LD_GENERAL, "Unsupported compression level passed to LZMA %s",
                         compress ? "encoder" : "decoder");
    goto err;
    // LCOV_EXCL_STOP
  }

  if (memory_usage + sizeof(tor_lzma_compress_state_t) > SIZE_MAX)
@@ -157,7 +161,7 @@ tor_lzma_state_size_precalc(int compress, compression_level_t level)
  return (size_t)memory_usage;

 err:
  return 0;
  return 0; // LCOV_EXCL_LINE
}
#endif // HAVE_LZMA.

@@ -189,17 +193,21 @@ tor_lzma_compress_new(int compress,
    retval = lzma_alone_encoder(&result->stream, &stream_options);

    if (retval != LZMA_OK) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Error from LZMA encoder: %s (%u).",
               lzma_error_str(retval), retval);
      goto err;
      // LCOV_EXCL_STOP
    }
  } else {
    retval = lzma_alone_decoder(&result->stream, MEMORY_LIMIT);

    if (retval != LZMA_OK) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Error from LZMA decoder: %s (%u).",
               lzma_error_str(retval), retval);
      goto err;
      // LCOV_EXCL_STOP
    }
  }

@@ -207,7 +215,7 @@ tor_lzma_compress_new(int compress,
  return result;

 err:
  tor_free(result);
  tor_free(result); // LCOV_EXCL_LINE
  return NULL;
#else // HAVE_LZMA.
  (void)compress;
@@ -295,10 +303,12 @@ tor_lzma_compress_process(tor_lzma_compress_state_t *state,
    case LZMA_DATA_ERROR:
    case LZMA_PROG_ERROR:
    default:
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "LZMA %s didn't finish: %s.",
               state->compress ? "compression" : "decompression",
               lzma_error_str(retval));
      return TOR_COMPRESS_ERROR;
      // LCOV_EXCL_STOP
  }
#else // HAVE_LZMA.
  (void)state;
+16 −0
Original line number Diff line number Diff line
@@ -196,31 +196,39 @@ tor_zstd_compress_new(int compress,
    result->u.compress_stream = ZSTD_createCStream();

    if (result->u.compress_stream == NULL) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Error while creating Zstandard stream");
      goto err;
      // LCOV_EXCL_STOP
    }

    retval = ZSTD_initCStream(result->u.compress_stream, preset);

    if (ZSTD_isError(retval)) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Zstandard stream initialization error: %s",
               ZSTD_getErrorName(retval));
      goto err;
      // LCOV_EXCL_STOP
    }
  } else {
    result->u.decompress_stream = ZSTD_createDStream();

    if (result->u.decompress_stream == NULL) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Error while creating Zstandard stream");
      goto err;
      // LCOV_EXCL_STOP
    }

    retval = ZSTD_initDStream(result->u.decompress_stream);

    if (ZSTD_isError(retval)) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Zstandard stream initialization error: %s",
               ZSTD_getErrorName(retval));
      goto err;
      // LCOV_EXCL_STOP
    }
  }

@@ -228,6 +236,7 @@ tor_zstd_compress_new(int compress,
  return result;

 err:
  // LCOV_EXCL_START
  if (compress) {
    ZSTD_freeCStream(result->u.compress_stream);
  } else {
@@ -236,6 +245,7 @@ tor_zstd_compress_new(int compress,

  tor_free(result);
  return NULL;
  // LCOV_EXCL_STOP
#else // HAVE_ZSTD.
  (void)compress;
  (void)method;
@@ -303,10 +313,12 @@ tor_zstd_compress_process(tor_zstd_compress_state_t *state,
  }

  if (ZSTD_isError(retval)) {
    // LCOV_EXCL_START
    log_warn(LD_GENERAL, "Zstandard %s didn't finish: %s.",
             state->compress ? "compression" : "decompression",
             ZSTD_getErrorName(retval));
    return TOR_COMPRESS_ERROR;
    // LCOV_EXCL_STOP
  }

  if (state->compress && !state->have_called_end) {
@@ -316,9 +328,11 @@ tor_zstd_compress_process(tor_zstd_compress_state_t *state,
    *out_len = output.size - output.pos;

    if (ZSTD_isError(retval)) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Zstandard compression unable to flush: %s.",
               ZSTD_getErrorName(retval));
      return TOR_COMPRESS_ERROR;
      // LCOV_EXCL_STOP
    }

    // ZSTD_flushStream returns 0 if the frame is done, or >0 if it
@@ -345,10 +359,12 @@ tor_zstd_compress_process(tor_zstd_compress_state_t *state,
    *out_len = output.size - output.pos;

    if (ZSTD_isError(retval)) {
      // LCOV_EXCL_START
      log_warn(LD_GENERAL, "Zstandard compression unable to write "
               "epilogue: %s.",
               ZSTD_getErrorName(retval));
      return TOR_COMPRESS_ERROR;
      // LCOV_EXCL_STOP
    }

    // endStream returns the number of bytes that is needed to write the
+7 −0
Original line number Diff line number Diff line
@@ -2250,6 +2250,11 @@ test_util_compress_impl(compress_method_t method)

  tt_assert(tor_compress_supports_method(method));

  if (method != NO_METHOD) {
    tt_assert(tor_compress_version_str(method) != NULL);
    tt_assert(tor_compress_header_version_str(method) != NULL);
  }

  buf1 = tor_strdup("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ");
  tt_assert(detect_compression_method(buf1, strlen(buf1)) == UNKNOWN_METHOD);

@@ -2353,6 +2358,8 @@ test_util_compress_stream_impl(compress_method_t method,
    tt_assert(cp1 > cp2); /* Make sure we really added something. */
  }

  tt_int_op(tor_compress_state_size(state), OP_GT, 0);

  tt_assert(!tor_uncompress(&buf3, &len2, buf1, 1024-len1,
                            method, 1, LOG_WARN));
  /* Make sure it compressed right. */
+1 −1

File changed.

Contains only whitespace changes.