summaryrefslogtreecommitdiff
path: root/misc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'misc.cc')
-rw-r--r--misc.cc14
1 files changed, 8 insertions, 6 deletions
diff --git a/misc.cc b/misc.cc
index 5d7c387..9b339cd 100644
--- a/misc.cc
+++ b/misc.cc
@@ -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){