]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/bextract.c
Fix uninitialized stack variable in bextract
[bacula/bacula] / bacula / src / stored / bextract.c
index fde9a99b26211693aced54543d777a6617ed7701..286c474c44c3840d3d9ccd8f8ff04178207eb7bf 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2011 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -410,8 +410,8 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
    case STREAM_WIN32_GZIP_DATA:
 #ifdef HAVE_LIBZ
       if (extract) {
-         uLong compress_len;
-         int stat;
+         uLong compress_len = compress_buf_size;
+         int stat = Z_BUF_ERROR;
 
          if (rec->maskedStream == STREAM_SPARSE_GZIP_DATA) {
             ser_declare;
@@ -436,11 +436,10 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
             wsize = rec->data_len;
          }
 
-         while ((stat=uncompress((Byte *)compress_buf, &compress_len,
-                                 (const Byte *)wbuf, (uLong)wsize)) == Z_BUF_ERROR)
-         {
+         while (compress_len < 10000000 && (stat=uncompress((Byte *)compress_buf, &compress_len,
+                                 (const Byte *)wbuf, (uLong)wsize)) == Z_BUF_ERROR) {
             /* The buffer size is too small, try with a bigger one */
-            compress_len = compress_len + (compress_len >> 1);
+            compress_len = 2 * compress_len;
             compress_buf = check_pool_memory_size(compress_buf,
                                                   compress_len);
          }