Browse Source

Idiot-proof uncompress; make sure it always nul-terminates its output. Also, make all compression methods nonzero.

svn:r2334
Nick Mathewson 21 years ago
parent
commit
b6798866d0
2 changed files with 6 additions and 3 deletions
  1. 5 2
      src/common/torgzip.c
  2. 1 1
      src/common/torgzip.h

+ 5 - 2
src/common/torgzip.c

@@ -10,7 +10,6 @@
 
 #include "orconfig.h"
 
-
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
@@ -74,7 +73,6 @@ tor_gzip_compress(char **out, size_t *out_len,
   if (deflateInit2(stream, Z_BEST_COMPRESSION, Z_DEFLATED,
 		   method_bits(method),
 		   8, Z_DEFAULT_STRATEGY) != Z_OK) {
-    printf("Z");
     log_fn(LOG_WARN, "Error from deflateInit2: %s",
 	   stream->msg?stream->msg:"<no message>");
     goto err;
@@ -200,6 +198,11 @@ tor_gzip_uncompress(char **out, size_t *out_len,
   }
   tor_free(stream);
 
+  /* NUL-terminate output. */
+  if (out_size == *out_len)
+    *out = tor_realloc(*out, out_size + 1);
+  (*out)[*out_len] = '\0';
+
   return 0;
  err:
   if (stream) {

+ 1 - 1
src/common/torgzip.h

@@ -10,7 +10,7 @@
 #ifndef __TORGZIP_H
 #define __TORGZIP_H
 
-typedef enum { GZIP_METHOD, ZLIB_METHOD } compress_method_t;
+typedef enum { GZIP_METHOD=1, ZLIB_METHOD=2 } compress_method_t;
 
 int
 tor_gzip_compress(char **out, size_t *out_len,