diff --git a/configure.ac b/configure.ac
index 9691bfe2aba8d506ddc0788d77262424915cc7ea..8c5d98e50380bc2ac53cbc00acea0a90bf8ea999 100644
--- a/configure.ac
+++ b/configure.ac
@@ -452,6 +452,9 @@ gl_VISIBILITY()
 # Add code coverage macro
 AX_CODE_COVERAGE
 
+AX_SANITIZER
+AS_IF([test -n "$sanitize_CFLAGS"], [CFLAGS="$CFLAGS $sanitize_CFLAGS"])
+
 AS_IF([test "$enable_documentation" = "yes"],[
 
 AC_PATH_PROGS([SPHINXBUILD], [sphinx-build sphinx-build-3], [false])
@@ -499,6 +502,8 @@ AC_MSG_RESULT([
     Jansson:  ${jansson_LIBS} ${jansson_CFLAGS}
     LMDB:     ${enable_lmdb} ${lmdb_LIBS} ${lmdb_CFLAGS}
 
+    Sanitizer: ${sanitize_CFLAGS}
+
     Prefix:		${prefix}
     Run dir:		${run_dir}
     Storage dir:	${storage_dir}
diff --git a/m4/sanitizer.m4 b/m4/sanitizer.m4
new file mode 100644
index 0000000000000000000000000000000000000000..2888cd42af254611bed321092acb464a2e0eaa7e
--- /dev/null
+++ b/m4/sanitizer.m4
@@ -0,0 +1,71 @@
+# Copyright 2015 CZ.NIC, z.s.p.o.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License version 3, as published
+# by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranties of
+# MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
+# PURPOSE.  See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+#
+# Processes --with-sanitize= and --with-sanitize-coverage= flags, checks
+# if the options are supported by the compiler, and sets the following
+# variables accordingly:
+#
+# - sanitize_enabled          yes|no
+# - sanitize_coverage_enabled yes|no
+# - sanitize_CFLAGS           -fsanitize=... -fsanitize-coverage=...
+#
+AC_DEFUN([AX_SANITIZER], [
+
+  # Configure options
+  AC_ARG_WITH([sanitize],
+    [AS_HELP_STRING([--with-sanitize], [Compile with sanitizer [default=no]])],
+    [],
+    [with_sanitize=no]
+  )
+  AC_ARG_WITH([sanitize-coverage],
+    [AS_HELP_STRING([--with-sanitize-coverage], [Compile with sanitizer coverage [default=no]])],
+    [],
+    [with_sanitize_coverage=no]
+  )
+
+  # Default values
+  AS_IF([test "$with_sanitize" = "yes"], [ with_sanitize=address ])
+  AS_IF([test "$with_sanitize_coverage" = "yes"], [ with_sanitize_coverage=edge,indirect-calls,8bit-counters ])
+
+  # Construct output variables
+  sanitize_enabled=no
+  sanitize_coverage_enabled=no
+  AS_IF([test "$with_sanitize" != "no"], [
+    sanitize_CFLAGS="-fsanitize=${with_sanitize}"
+    sanitize_enabled=yes
+    AS_IF([test "$with_sanitize_coverage" != "no"], [
+      sanitize_CFLAGS="$sanitize_CFLAGS -fsanitize-coverage=${with_sanitize_coverage}"
+      sanitize_coverage_enabled=yes
+    ])
+  ], [
+    sanitize_CFLAGS=
+    AS_IF([test "$with_sanitize_coverage" != "no"], [
+      AC_MSG_WARN([--with-sanitize-coverage cannot be used without --with-sanitize])
+    ])
+  ])
+
+  # Test compiler support
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $sanitize_CFLAGS"
+  AC_MSG_CHECKING([whether compiler accepts '${sanitize_CFLAGS}' options])
+  AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [
+    AC_MSG_RESULT([yes])
+  ], [
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([Sanitizer options are not supported.])
+  ])
+  CFLAGS="$save_CFLAGS"
+
+]) # AX_SANITIZER