From 0d34dcf8f4b303a9ea1d9f18df421fac5714a040 Mon Sep 17 00:00:00 2001
From: Martin Nilsson <nilsson@opera.com>
Date: Sun, 10 Aug 2014 21:05:23 +0200
Subject: [PATCH] Cap compatibility mode to lowest supported.

---
 lib/master.pike.in      | 11 +++++++++++
 src/builtin_functions.c |  3 +++
 src/version.h           |  3 +++
 3 files changed, 17 insertions(+)

diff --git a/lib/master.pike.in b/lib/master.pike.in
index 29e3bb5ede..1cbf53f660 100644
--- a/lib/master.pike.in
+++ b/lib/master.pike.in
@@ -3760,6 +3760,14 @@ void _main(array(string(0..255)) orig_argv)
     }
 
     cur_compat_ver = Version (compat_major, compat_minor);
+    if (cur_compat_ver < lowestcompat)
+    {
+      werror("This Pike only supports compatibility down to %s.\n",
+             (string)lowestcompat);
+      cur_compat_ver = lowestcompat;
+      compat_major = lowestcompat->major;
+      compat_minor = lowestcompat->minor;
+    }
     if (compat_major != -1) {
       object compat_master = get_compat_master (compat_major, compat_minor);
 
@@ -5873,6 +5881,9 @@ class Version
 //! Version information about the current Pike version.
 Version currentversion = Version(__REAL_MAJOR__, __REAL_MINOR__);
 
+Version lowestcompat = Version(Builtin.LOWEST_COMPAT_MAJOR,
+                               Builtin.LOWEST_COMPAT_MINOR);
+
 mapping(Version:CompatResolver) compat_handler_cache = ([
   currentversion:this_object(),
 ]);
diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index bc735083bb..8037dcf96c 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -10374,6 +10374,9 @@ void init_builtin_efuns(void)
   ADD_INT_CONSTANT ("DESTRUCT_NO_REFS", DESTRUCT_NO_REFS, 0);
   ADD_INT_CONSTANT ("DESTRUCT_GC", DESTRUCT_GC, 0);
   ADD_INT_CONSTANT ("DESTRUCT_CLEANUP", DESTRUCT_CLEANUP, 0);
+
+  ADD_INT_CONSTANT("LOWEST_COMPAT_MAJOR", LOWEST_COMPAT_MAJOR, 0);
+  ADD_INT_CONSTANT("LOWEST_COMPAT_MINOR", LOWEST_COMPAT_MINOR, 0);
 }
 
 void exit_builtin_efuns(void)
diff --git a/src/version.h b/src/version.h
index b49c5e1a21..988f4e159a 100644
--- a/src/version.h
+++ b/src/version.h
@@ -8,6 +8,9 @@
 #define PIKE_MINOR_VERSION 0
 #define PIKE_BUILD_VERSION 3
 
+#define LOWEST_COMPAT_MAJOR 0
+#define LOWEST_COMPAT_MINOR 5
+
 /* Prototypes begin here */
 PMOD_EXPORT void f_version(INT32 args);
 void push_compact_version();
-- 
GitLab