summaryrefslogtreecommitdiff
path: root/gr-blocks/lib/wavfile.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-blocks/lib/wavfile.cc')
-rw-r--r--gr-blocks/lib/wavfile.cc18
1 files changed, 17 insertions, 1 deletions
diff --git a/gr-blocks/lib/wavfile.cc b/gr-blocks/lib/wavfile.cc
index d3015f75b8..846de48177 100644
--- a/gr-blocks/lib/wavfile.cc
+++ b/gr-blocks/lib/wavfile.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2004,2008,2012-2013 Free Software Foundation, Inc.
+ * Copyright 2004,2008,2012-2013,2020 Free Software Foundation, Inc.
*
* This file is part of GNU Radio
*
@@ -13,6 +13,7 @@
#endif
#include <gnuradio/blocks/wavfile.h>
+#include <gnuradio/logger.h>
#include <stdint.h>
#include <cstring>
@@ -73,15 +74,30 @@ bool wavheader_parse(FILE* fp,
uint16_t block_align;
uint16_t bits_per_sample;
uint32_t chunk_size;
+ long real_file_size;
size_t fresult;
+ fseek(fp, 0L, SEEK_END);
+ real_file_size = ftell(fp);
+ rewind(fp);
+
fresult = fread(str_buf, 1, 4, fp);
if (fresult != 4 || strncmp(str_buf, "RIFF", 4) || feof(fp)) {
return false;
}
fresult = fread(&file_size, 1, 4, fp);
+ file_size = wav_to_host(file_size);
+ if (fresult != 4 || file_size != real_file_size - 8L) {
+ // FIXME use predefined loggers
+ gr::logger_ptr logger, debug_logger;
+ gr::configure_default_loggers(logger, debug_logger, "wavfile");
+ GR_LOG_ERROR(logger,
+ boost::format("invalid file size (expected: %d; actual: %d)") %
+ (file_size + 8L) % real_file_size);
+ return false;
+ }
fresult = fread(str_buf, 1, 8, fp);
if (fresult != 8 || strncmp(str_buf, "WAVEfmt ", 8) || feof(fp)) {