summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSzczepan Zalega <szczepan@nitrokey.com>2019-06-13 14:41:17 +0200
committerSzczepan Zalega <szczepan@nitrokey.com>2019-06-13 15:01:03 +0200
commit82e659779531a969155420f4f816b2458de3cfd5 (patch)
treea06f2f7dad5fe320677828b9f95d4482f0c4f7d9
parent0deddc2205b164cb775ff908265eebdf80943df2 (diff)
downloadlibnitrokey-82e659779531a969155420f4f816b2458de3cfd5.tar.gz
libnitrokey-82e659779531a969155420f4f816b2458de3cfd5.tar.bz2
Use strnlen for field copies
Signed-off-by: Szczepan Zalega <szczepan@nitrokey.com>
-rw-r--r--libnitrokey/misc.h16
1 files changed, 9 insertions, 7 deletions
diff --git a/libnitrokey/misc.h b/libnitrokey/misc.h
index d10c8df..a9c4672 100644
--- a/libnitrokey/misc.h
+++ b/libnitrokey/misc.h
@@ -67,7 +67,8 @@ private:
oss << std::hex << std::setw(sizeof(value)*2) << std::setfill('0') << value;
return oss.str();
}
-
+
+#define FIELD_WIDTH_MAX (100)
/**
* Copies string from pointer to fixed size C-style array. Src needs to be a valid C-string - eg. ended with '\0'.
* Throws when source is bigger than destination.
@@ -82,12 +83,13 @@ private:
// throw EmptySourceStringException(slot_number);
return;
const size_t s_dest = sizeof dest;
- LOG(std::string("strcpyT sizes dest src ")
- +std::to_string(s_dest)+ " "
- +std::to_string(strlen(src))+ " "
- ,nitrokey::log::Loglevel::DEBUG_L2);
- if (strlen(src) > s_dest){
- throw TooLongStringException(strlen(src), s_dest, src);
+ const size_t src_strlen = strnlen(src, FIELD_WIDTH_MAX);
+ LOG(std::string("strcpyT sizes dest src ")
+ + std::to_string(s_dest) + " "
+ + std::to_string(src_strlen) + " "
+ , nitrokey::log::Loglevel::DEBUG_L2);
+ if (src_strlen > s_dest){
+ throw TooLongStringException(src_strlen, s_dest, src);
}
strncpy((char*) &dest, src, s_dest);
}