瀏覽代碼

[Minor] Add support for address sanitizer

tags/1.8.0
Vsevolod Stakhov 5 年之前
父節點
當前提交
d8837eff35
共有 2 個檔案被更改,包括 37 行新增2 行删除
  1. 25
    1
      src/libutil/str_util.c
  2. 12
    1
      src/libutil/str_util.h

+ 25
- 1
src/libutil/str_util.c 查看文件

@@ -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
*/

+ 12
- 1
src/libutil/str_util.h 查看文件

@@ -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

Loading…
取消
儲存