diff --git a/core/dap_strfuncs.c b/core/dap_strfuncs.c
index 03700ebbe5a58701ff1c5de0cf7cdf9d96fe0b8f..cd07363a9b9545dd0913968f0fa5141616f3d95f 100755
--- a/core/dap_strfuncs.c
+++ b/core/dap_strfuncs.c
@@ -125,7 +125,7 @@ char* dap_strstr_len(const char *a_haystack, ssize_t a_haystack_len, const char
     else
     {
         const char *l_p = a_haystack;
-        size_t l_needle_len = strlen(a_needle);
+        ssize_t l_needle_len = (ssize_t)strlen(a_needle);
         const char *l_end;
         size_t l_i;
 
diff --git a/test/core/dap_circular_test.c b/test/core/dap_circular_test.c
index ed5cbe5230755225a757ee342064ceacd35b8bbf..2e3f108118b98362368134d302ae5cd35503f8ce 100644
--- a/test/core/dap_circular_test.c
+++ b/test/core/dap_circular_test.c
@@ -174,6 +174,7 @@ void dap_circular_load_test()
     count_writed_bytes = 4;
 
     char expectedBuffer[MAX_RESULT_BUF_LEN];
+    memset(expectedBuffer, 0, MAX_RESULT_BUF_LEN);
     circular_buffer_read(cb, count_writed_bytes, expectedBuffer);
 
     int count_write_bytes = 4;
diff --git a/test/core/dap_strfuncs_test.c b/test/core/dap_strfuncs_test.c
new file mode 100644
index 0000000000000000000000000000000000000000..d114d07892416bb3f9e52c23d4c81ee0b67d7494
--- /dev/null
+++ b/test/core/dap_strfuncs_test.c
@@ -0,0 +1,90 @@
+#include "dap_common.h"
+#include "dap_strfuncs_test.h"
+
+void dap_str_dup_test(void)
+{
+    int l_a = rand(), l_b = rand();
+    const char *l_s = "test string";
+    char l_str0[1024];
+    sprintf(l_str0, "a=%d b=%d s=%s", l_a, l_b, l_s);
+    char *l_str1 = dap_strdup_printf("a=%d b=%d s=%s", l_a, l_b, l_s);
+    size_t str_size0 = strlen(l_str0);
+    size_t str_size1 = strlen(l_str1);
+
+    char *l_str2 = DAP_NEW_SIZE(char, str_size1 + 1);
+    dap_stpcpy(l_str2, l_str1);
+
+    size_t str_size2 = strlen(l_str2);
+    dap_assert_PIF(str_size0 == str_size1, "Strings sizes must be equal");
+    dap_assert_PIF(str_size1 == str_size2, "Strings sizes must be equal");
+
+    dap_assert(!strcmp(l_str0, l_str1), "Test dap_strdup_printf()");
+    dap_assert(!strcmp(l_str1, l_str2), "Test dap_stpcpy()");
+    DAP_DELETE(l_str1);
+    DAP_DELETE(l_str2);
+}
+
+void dap_str_modify_test(void)
+{
+    const char *l_s_in = "Test String";
+    const char *l_s_up_check = "TEST STRING";
+    const char *l_s_down_check = "test string";
+    char *l_s_out;
+
+    l_s_out = dap_strup(l_s_in, -1);
+    dap_assert(!strcmp(l_s_out, l_s_up_check), "Test dap_strup()");
+    DAP_DELETE(l_s_out);
+
+    l_s_out = dap_strdown(l_s_in, -1);
+    dap_assert(!strcmp(l_s_out, l_s_down_check), "Test dap_strdown()");
+    DAP_DELETE(l_s_out);
+
+    l_s_out = dap_strdup(l_s_in);
+    dap_strreverse(l_s_out);
+    dap_assert_PIF(strcmp(l_s_out, l_s_in), "String not modified");
+    dap_strreverse(l_s_out);
+    dap_assert(!strcmp(l_s_out, l_s_in), "Test dap_strreverse()");
+    DAP_DELETE(l_s_out);
+
+    l_s_out = dap_strdup_printf("      %s  ", l_s_in);
+    dap_strstrip(l_s_out);
+    dap_assert(!strcmp(l_s_out, l_s_in), "Test dap_strstrip()");
+    DAP_DELETE(l_s_out);
+}
+
+void dap_str_array_test(void)
+{
+    const char *l_s_in = "1:23:: Test:  :\n:String:";
+    char **l_s_array = dap_strsplit(l_s_in, ":", -1);
+
+    int l_count = 1;
+    char *l_s_tmp = dap_strstr_len(l_s_in, -1, ":");
+    while(l_s_tmp) {
+        l_s_tmp = dap_strstr_len(l_s_tmp + 1, -1, ":");
+        l_count++;
+    }
+
+    char **l_s_array_copy = dap_strdupv(l_s_array);
+
+    dap_assert_PIF(dap_str_countv(l_s_array) == l_count, "String split");
+    dap_assert_PIF(dap_str_countv(l_s_array_copy) == l_count, "String copy");
+    char *l_s_out = dap_strjoinv(":", l_s_array);
+    dap_assert(!strcmp(l_s_out, l_s_in), "Test string array functions");
+
+    dap_strfreev(l_s_array);
+    dap_strfreev(l_s_array_copy);
+    DAP_DELETE(l_s_out);
+}
+
+void dap_strfuncs_tests_run(void)
+{
+    dap_print_module_name("dap_strfuncs");
+
+    dap_str_dup_test();
+    dap_str_modify_test();
+    dap_str_array_test();
+
+    dap_usleep(0.5 * DAP_USEC_PER_SEC);
+    dap_assert(1, "Test dap_usleep(0.5 sec.)");
+
+}
diff --git a/test/core/dap_strfuncs_test.h b/test/core/dap_strfuncs_test.h
new file mode 100644
index 0000000000000000000000000000000000000000..ef2e7963d900896e007b6cd96040f75e8e7ea122
--- /dev/null
+++ b/test/core/dap_strfuncs_test.h
@@ -0,0 +1,5 @@
+#pragma once
+#include "dap_test.h"
+#include "dap_strfuncs.h"
+
+extern void dap_strfuncs_tests_run(void);
diff --git a/test/core/main.c b/test/core/main.c
index 84291baf4fe4083f5b1728f2a44c791d731163ba..d4c1229dd4ba131c6be3b9f4d718b363a7ce6f98 100755
--- a/test/core/main.c
+++ b/test/core/main.c
@@ -1,12 +1,14 @@
 #include "dap_config_test.h"
 #include "dap_common_test.h"
 #include "dap_network_monitor_test.h"
+#include "dap_strfuncs_test.h"
 #include "dap_common.h"
 
 
 int main(void) {
     // switch off debug info from library
     set_log_level(L_CRITICAL);
+    dap_strfuncs_tests_run();
     dap_config_tests_run();
     dap_common_test_run();
 #ifdef __unix__
diff --git a/test/libdap-test b/test/libdap-test
index d2257789e0c796a5a3b637e14dcbaf8a8c7880cc..b76175acc517f085c319c8e66c62bd143f96bf94 160000
--- a/test/libdap-test
+++ b/test/libdap-test
@@ -1 +1 @@
-Subproject commit d2257789e0c796a5a3b637e14dcbaf8a8c7880cc
+Subproject commit b76175acc517f085c319c8e66c62bd143f96bf94