diff --git a/src/or/config.c b/src/or/config.c
index ce7adbace68ab7c4de2992bb8b2c02dfce4a3c60..53f2c768d024f55d6fe182f2df66c46550d51b5d 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -4097,9 +4097,13 @@ have_enough_mem_for_dircache(const or_options_t *options, size_t total_mem,
                              char **msg)
 {
   *msg = NULL;
+  /* XXX We should possibly be looking at MaxMemInQueues here
+   * unconditionally.  Or we should believe total_mem unconditionally. */
   if (total_mem == 0) {
-    if (get_total_system_memory(&total_mem) < 0)
-      total_mem = options->MaxMemInQueues;
+    if (get_total_system_memory(&total_mem) < 0) {
+      total_mem = options->MaxMemInQueues >= SIZE_MAX ?
+        SIZE_MAX : options->MaxMemInQueues;
+    }
   }
   if (options->DirCache) {
     if (total_mem < DIRCACHE_MIN_BANDWIDTH) {
diff --git a/src/test/include.am b/src/test/include.am
index 44a2d86977a56ae69c547a4dff6cff828493572b..786fb77dd05410d0877c248c73bf451c6722dccb 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -193,6 +193,7 @@ noinst_HEADERS+= \
 	src/test/rend_test_helpers.h \
 	src/test/test.h \
 	src/test/test_helpers.h \
+	src/test/test_dir_common.h \
 	src/test/test_descriptors.inc \
 	src/test/example_extrainfo.inc \
 	src/test/failing_routerdescs.inc \