diff options
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){ |