--- a/project_files/hwc/rtl/misc.h Wed Nov 07 17:45:20 2018 +0100
+++ b/project_files/hwc/rtl/misc.h Wed Nov 07 19:43:17 2018 +0100
@@ -20,7 +20,8 @@
//#define FPCRTL_DEBUG
-#define FIX_STRING(s) (s.str[s.len == 255 ? 254 : s.len] = 0)
+#define FIX_STRING(s) do { s.str[s.len == 255 ? 254 : s.len] = 0; } while (0)
+#define FIX_STRINGA(s) do { s.str[s.len == MAX_ANSISTRING_LENGTH ? MAX_ANSISTRING_LENGTH - 1 : s.len] = 0; } while (0)
//#define fpcrtl_check_string(s) do{ if(strlen((s).str) != (s).len){ \
// printf("String %s internal inconsistency error. Length should be %d but actually is %d.\n", (s).str, strlen((s).str), (s).len); \
// assert(0);\
--- a/project_files/hwc/rtl/system.c Wed Nov 07 17:45:20 2018 +0100
+++ b/project_files/hwc/rtl/system.c Wed Nov 07 19:43:17 2018 +0100
@@ -275,6 +275,8 @@
return 0;
}
+ FIX_STRINGA(str);
+
p = strchr(str.s + 1, c);
if (p == NULL) {
@@ -298,6 +300,8 @@
}
FIX_STRING(substr);
+ FIX_STRINGA(str);
+
str.s[str.len] = 0;
p = strstr(str.s + 1, substr.str);