diff options
author | Marcus Müller <mmueller@gnuradio.org> | 2021-01-25 23:50:04 +0100 |
---|---|---|
committer | mormj <34754695+mormj@users.noreply.github.com> | 2021-02-18 06:49:06 -0500 |
commit | c5a1be2e93186df3c20ed2c0512dfd2e1ce7799e (patch) | |
tree | 37040bd9db6189ea6d46cbaf93d1eed7c0f96ce0 /gr-blocks/lib | |
parent | b4eb9a263d0b250bed93a1e2afdf2bb07a67f33a (diff) |
digital: packed<->unpacked: check chunk sizes, incl. NDBEBUG builds
Also, get rid of impossible asserts(), and throw exceptions instead of
assert(0)-aborting, as we now have facilities to handle failed
block::work().
Signed-off-by: Marcus Müller <mmueller@gnuradio.org>
Diffstat (limited to 'gr-blocks/lib')
-rw-r--r-- | gr-blocks/lib/packed_to_unpacked_impl.cc | 18 | ||||
-rw-r--r-- | gr-blocks/lib/unpacked_to_packed_impl.cc | 15 |
2 files changed, 19 insertions, 14 deletions
diff --git a/gr-blocks/lib/packed_to_unpacked_impl.cc b/gr-blocks/lib/packed_to_unpacked_impl.cc index 662ff4ddd8..e33bdf933c 100644 --- a/gr-blocks/lib/packed_to_unpacked_impl.cc +++ b/gr-blocks/lib/packed_to_unpacked_impl.cc @@ -15,7 +15,7 @@ #include "packed_to_unpacked_impl.h" #include <gnuradio/io_signature.h> -#include <cassert> +#include <stdexcept> namespace gr { namespace blocks { @@ -38,8 +38,12 @@ packed_to_unpacked_impl<T>::packed_to_unpacked_impl(unsigned int bits_per_chunk, d_endianness(endianness), d_index(0) { - assert(bits_per_chunk <= this->d_bits_per_type); - assert(bits_per_chunk > 0); + if (bits_per_chunk > d_bits_per_type) { + GR_LOG_ERROR(this->d_logger, + boost::format("Requested to get %d out of a %d bit chunk") % + bits_per_chunk % d_bits_per_type); + throw std::domain_error("can't have more bits in chunk than in output type"); + } this->set_relative_rate((uint64_t)this->d_bits_per_type, (uint64_t)bits_per_chunk); } @@ -102,7 +106,6 @@ int packed_to_unpacked_impl<T>::general_work(int noutput_items, { unsigned int index_tmp = d_index; - assert(input_items.size() == output_items.size()); const int nstreams = input_items.size(); for (int m = 0; m < nstreams; m++) { @@ -134,12 +137,9 @@ int packed_to_unpacked_impl<T>::general_work(int noutput_items, break; default: - assert(0); + GR_LOG_ERROR(this->d_logger, "unknown endianness"); + throw std::runtime_error("unknown endianness"); } - - // printf("almost got to end\n"); - assert(ninput_items[m] >= - (int)((d_index + (this->d_bits_per_type - 1)) >> this->log2_l_type())); } d_index = index_tmp; diff --git a/gr-blocks/lib/unpacked_to_packed_impl.cc b/gr-blocks/lib/unpacked_to_packed_impl.cc index e535051985..5ffb0433e4 100644 --- a/gr-blocks/lib/unpacked_to_packed_impl.cc +++ b/gr-blocks/lib/unpacked_to_packed_impl.cc @@ -15,7 +15,8 @@ #include "unpacked_to_packed_impl.h" #include <gnuradio/io_signature.h> -#include <cassert> +#include <boost/format.hpp> +#include <stdexcept> namespace gr { namespace blocks { @@ -39,8 +40,12 @@ unpacked_to_packed_impl<T>::unpacked_to_packed_impl(unsigned int bits_per_chunk, d_endianness(endianness), d_index(0) { - assert(bits_per_chunk <= d_bits_per_type); - assert(bits_per_chunk > 0); + if (bits_per_chunk > d_bits_per_type) { + GR_LOG_ERROR(this->d_logger, + boost::format("Requested to put %d in a %d bit chunk") % + bits_per_chunk % d_bits_per_type); + throw std::domain_error("can't have more bits in chunk than in output type"); + } this->set_relative_rate((uint64_t)bits_per_chunk, (uint64_t)this->d_bits_per_type); } @@ -83,7 +88,6 @@ int unpacked_to_packed_impl<T>::general_work(int noutput_items, { unsigned int index_tmp = d_index; - assert(input_items.size() == output_items.size()); const int nstreams = input_items.size(); for (int m = 0; m < nstreams; m++) { @@ -122,7 +126,8 @@ int unpacked_to_packed_impl<T>::general_work(int noutput_items, break; default: - assert(0); + GR_LOG_ERROR(this->d_logger, "unknown endianness"); + throw std::runtime_error("unknown endianness"); } } |