~ubuntu-branches/ubuntu/trusty/libssh/trusty

« back to all changes in this revision

Viewing changes to libssh/gzip.c

  • Committer: Bazaar Package Importer
  • Author(s): Laurent Bigonville
  • Date: 2009-12-12 14:29:12 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20091212142912-ha5g2iibt6nfnjq8
Tags: 0.4.0-1
* New upstream release.
  - Bump soname
  - Adjust .symbols file
* Readd static library in -dev package
* Let dh_lintian install override file
* debian/README.Debian: Update file
* debian/rules: Add list-missing rule

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
#include "config.h"
26
26
#include "libssh/priv.h"
 
27
#include "libssh/buffer.h"
 
28
#include "libssh/session.h"
27
29
 
28
30
#if defined(HAVE_LIBZ) && defined(WITH_LIBZ)
29
31
 
33
35
 
34
36
#define BLOCKSIZE 4092
35
37
 
36
 
static z_stream *initcompress(SSH_SESSION *session, int level) {
 
38
static z_stream *initcompress(ssh_session session, int level) {
37
39
  z_stream *stream = NULL;
38
40
  int status;
39
41
 
54
56
  return stream;
55
57
}
56
58
 
57
 
static BUFFER *gzip_compress(SSH_SESSION *session,BUFFER *source,int level){
 
59
static ssh_buffer gzip_compress(ssh_session session,ssh_buffer source,int level){
58
60
  z_stream *zout = session->current_crypto->compress_out_ctx;
59
61
  void *in_ptr = buffer_get(source);
60
62
  unsigned long in_size = buffer_get_len(source);
61
 
  BUFFER *dest = NULL;
 
63
  ssh_buffer dest = NULL;
62
64
  static unsigned char out_buf[BLOCKSIZE] = {0};
63
65
  unsigned long len;
64
66
  int status;
98
100
  return dest;
99
101
}
100
102
 
101
 
int compress_buffer(SSH_SESSION *session, BUFFER *buf) {
102
 
  BUFFER *dest = NULL;
 
103
int compress_buffer(ssh_session session, ssh_buffer buf) {
 
104
  ssh_buffer dest = NULL;
103
105
 
104
106
  dest = gzip_compress(session, buf, 9);
105
107
  if (dest == NULL) {
122
124
 
123
125
/* decompression */
124
126
 
125
 
static z_stream *initdecompress(SSH_SESSION *session) {
 
127
static z_stream *initdecompress(ssh_session session) {
126
128
  z_stream *stream = NULL;
127
129
  int status;
128
130
 
143
145
  return stream;
144
146
}
145
147
 
146
 
static BUFFER *gzip_decompress(SSH_SESSION *session, BUFFER *source) {
 
148
static ssh_buffer gzip_decompress(ssh_session session, ssh_buffer source, size_t maxlen) {
147
149
  z_stream *zin = session->current_crypto->compress_in_ctx;
148
150
  void *in_ptr = buffer_get_rest(source);
149
151
  unsigned long in_size = buffer_get_rest_len(source);
150
152
  static unsigned char out_buf[BLOCKSIZE] = {0};
151
 
  BUFFER *dest = NULL;
 
153
  ssh_buffer dest = NULL;
152
154
  unsigned long len;
153
155
  int status;
154
156
 
183
185
      buffer_free(dest);
184
186
      return NULL;
185
187
    }
186
 
 
 
188
    if (buffer_get_len(dest) > maxlen){
 
189
      /* Size of packet exceded, avoid a denial of service attack */
 
190
      buffer_free(dest);
 
191
      return NULL;
 
192
    }
187
193
    zin->next_out = out_buf;
188
194
  } while (zin->avail_out == 0);
189
195
 
190
196
  return dest;
191
197
}
192
198
 
193
 
int decompress_buffer(SSH_SESSION *session,BUFFER *buf){
194
 
  BUFFER *dest = NULL;
 
199
int decompress_buffer(ssh_session session,ssh_buffer buf, size_t maxlen){
 
200
  ssh_buffer dest = NULL;
195
201
 
196
 
  dest = gzip_decompress(session,buf);
 
202
  dest = gzip_decompress(session,buf, maxlen);
197
203
  if (dest == NULL) {
198
204
    return -1;
199
205
  }