Macros to simplify tentative parsing.
diff --git a/src/dnssec.c b/src/dnssec.c
index 04b80cc..c9f80ee 100644
--- a/src/dnssec.c
+++ b/src/dnssec.c
@@ -3,6 +3,25 @@
 #include "dnssec-crypto.h"
 #include <assert.h>
 
+#define CHECKED_GETCHAR(var, ptr, len) do { \
+    if ((len) < 1) return 0; \
+    var = *ptr++; \
+    (len) -= 1; \
+  } while (0)
+
+#define CHECKED_GETSHORT(var, ptr, len) do { \
+    if ((len) < 2) return 0; \
+    GETSHORT(var, ptr); \
+    (len) -= 2; \
+  } while (0)
+
+#define CHECKED_GETLONG(var, ptr, len) do { \
+    if ((len) < 4) return 0; \
+    GETLONG(var, ptr); \
+    (len) -= 4; \
+  } while (0)
+
+
 #define SERIAL_UNDEF  -100
 #define SERIAL_EQ        0
 #define SERIAL_LT       -1