summaryrefslogtreecommitdiff
path: root/misc.cc
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2016-09-09 16:42:31 +0200
committerSzczepan Zalega <szczepan@nitrokey.com>2016-09-10 10:51:53 +0200
commita46491a97da08e495c92bba8046426678b5564f7 (patch)
treed332db36123c80ac84474c75b9be4acdff81bf54 /misc.cc
parent3632e8a32d47950102bc077fd32f9c88316370e9 (diff)
downloadlibnitrokey-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.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){