diff options
author | Szczepan Zalega <szczepan@nitrokey.com> | 2016-09-09 16:42:31 +0200 |
---|---|---|
committer | Szczepan Zalega <szczepan@nitrokey.com> | 2016-09-10 10:51:53 +0200 |
commit | a46491a97da08e495c92bba8046426678b5564f7 (patch) | |
tree | d332db36123c80ac84474c75b9be4acdff81bf54 /misc.cc | |
parent | 3632e8a32d47950102bc077fd32f9c88316370e9 (diff) | |
download | libnitrokey-a46491a97da08e495c92bba8046426678b5564f7.tar.gz libnitrokey-a46491a97da08e495c92bba8046426678b5564f7.tar.bz2 |
Remove asserts in favor of exceptions or warnings. Test changes in Python.
On possible data truncation return LibraryError(exception) instead of silently truncating and logging warning
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
Diffstat (limited to 'misc.cc')
-rw-r--r-- | misc.cc | 14 |
1 files changed, 8 insertions, 6 deletions
@@ -4,25 +4,27 @@ #include "inttypes.h" #include <cstdlib> #include <cstring> -#include <cassert> +#include "LibraryException.h" namespace nitrokey { namespace misc { std::vector<uint8_t> hex_string_to_byte(const char* hexString){ + const size_t big_string_size = 256; //arbitrary 'big' number const size_t s_size = strlen(hexString); - const size_t d_size = (s_size+1)/2; // add 1 for odd, ignore for even - assert(s_size%2==0); - assert(s_size<256); //arbitrary 'big' number + const size_t d_size = s_size/2; + if (s_size%2!=0 || s_size==0 || s_size>big_string_size){ + throw InvalidHexString(0); + } auto data = std::vector<uint8_t>(d_size, 0); char buf[2]; for(int i=0; i<s_size; i++){ char c = hexString[i]; - bool char_from_range = ('0' <= c && c <='9' || 'A' <= c && c <= 'F' || 'a' <= c && c<= 'f'); + bool char_from_range = (('0' <= c && c <='9') || ('A' <= c && c <= 'F') || ('a' <= c && c<= 'f')); if (!char_from_range){ - return {}; + throw InvalidHexString(c); } buf[i%2] = c; if (i%2==1){ |