X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Fwsr88ddec.c;h=9db0589c89dfa863f8d65fd8fdcd4091a0fa2c7b;hb=302cb674feca29d05f548f29e9e93dd89453d8a3;hp=f8cd98cc6a4d27d0f3cff46b4c6bc56f576aa2d0;hpb=a9c53bf6ef0acd5b3c3266808d6e9d8c5b23e41f;p=aweather diff --git a/src/wsr88ddec.c b/src/wsr88ddec.c index f8cd98c..9db0589 100644 --- a/src/wsr88ddec.c +++ b/src/wsr88ddec.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2010 Andy Spencer + * Copyright (C) 2009-2011 Andy Spencer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,6 +18,8 @@ #include #include +#define SANITY_MAX_SIZE 50*1024*1024 // 50 MB/bzip + char *bunzip2(char *input, int input_len, int *output_len) { bz_stream *stream = g_new0(bz_stream, 1); @@ -51,7 +53,7 @@ char *bunzip2(char *input, int input_len, int *output_len) // stream->avail_in, // stream->next_out, // stream->avail_out); - } while ((status = BZ2_bzDecompress(stream)) == BZ_OK && output_size < 1024*1024); + } while ((status = BZ2_bzDecompress(stream)) == BZ_OK && output_size < SANITY_MAX_SIZE); //g_debug("done with status %d = %d", status, BZ_STREAM_END); @@ -92,17 +94,17 @@ int main(int argc, char **argv) if (size < 0) return 0; //g_debug("size = %x", size); - if (size > 20*1024*1024) + if (size > SANITY_MAX_SIZE) g_error("sanity check failed, buf is to big: %d", size); buf = g_realloc(buf, size); - if (!fread(buf, size, 1, input)) + if (fread(buf, 1, size, input) != size) g_error("error reading data"); //fwrite(buf, 1, size, output); // DEBUG int dec_len; char *dec = bunzip2(buf, size, &dec_len); //g_debug("decompressed %u bytes", dec_len); - if (!fwrite(dec, 1, dec_len, output)) + if (fwrite(dec, 1, dec_len, output) != dec_len) g_error("error writing data"); g_free(dec); //g_debug("decompressed %-6x -> %x", size, dec_len);