]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Add support for address sanitizer
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 13 Sep 2018 11:43:49 +0000 (12:43 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 13 Sep 2018 11:43:49 +0000 (12:43 +0100)
src/libutil/str_util.c
src/libutil/str_util.h

index 189d7a3986f2085577d4dca5a5e49440187fb0aa..7ff2d9ae79ec2fc5d61b76e5564403241e7fabe4 100644 (file)
@@ -330,7 +330,7 @@ rspamd_gstring_icase_hash (gconstpointer key)
 #define HASZERO(x) ~(((((x) & ZEROMASK) + ZEROMASK) | (x)) | ZEROMASK)
 
 gsize
-rspamd_strlcpy (gchar *dst, const gchar *src, gsize siz)
+rspamd_strlcpy_fast (gchar *dst, const gchar *src, gsize siz)
 {
        gchar *d = dst;
        const gchar *s = src;
@@ -371,6 +371,30 @@ rspamd_strlcpy (gchar *dst, const gchar *src, gsize siz)
        return (d - dst);
 }
 
+size_t
+rspamd_strlcpy_safe (gchar *dst, const gchar *src, gsize siz)
+{
+       const gchar *osrc = src;
+       gchar *d = dst;
+       gsize nleft = siz;
+
+       if (nleft != 0) {
+               while (--nleft != 0) {
+                       if ((*d++ = *src++) == '\0') {
+                               break;
+                       }
+               }
+       }
+
+       if (nleft == 0) {
+               if (siz != 0) {
+                       *d = '\0';
+               }
+       }
+
+       return (d - dst);
+}
+
 /*
  * Try to convert string of length to long
  */
index 9fa91429260aaafbbba025d0df24c050184c6ab8..73637a62cd8b06d29b9247045e092b943f1f7f2f 100644 (file)
@@ -74,7 +74,18 @@ gboolean rspamd_gstring_icase_equal (gconstpointer v, gconstpointer v2);
  * @param siz length of destination buffer
  * @return bytes copied
  */
-gsize rspamd_strlcpy (gchar *dst, const gchar *src, gsize siz);
+gsize rspamd_strlcpy_fast (gchar *dst, const gchar *src, gsize siz);
+gsize rspamd_strlcpy_safe (gchar *dst, const gchar *src, gsize siz);
+
+#if defined(__has_feature)
+#  if __has_feature(address_sanitizer)
+#    define rspamd_strlcpy rspamd_strlcpy_safe
+#  else
+#    define rspamd_strlcpy rspamd_strlcpy_fast
+#  endif
+#else
+#  define rspamd_strlcpy rspamd_strlcpy_fast
+#endif
 
 /*
  * Try to convert string of length to long