]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: lua: Map.end are not reliable because "end" is a reserved keyword
authorThierry FOURNIER <thierry.fournier@ozon.io>
Sat, 28 Jan 2017 07:33:08 +0000 (08:33 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 30 Jan 2017 19:29:10 +0000 (20:29 +0100)
This patch change the names prefixing it by a "_". So "end" becomes "_end".
The backward compatibility with names without the prefix "_" is assured.
In other way, another the keyword "end" can be used like this: Map['end'].

Thanks Robin H. Johnson for the bug repport

This should be backported in version 1.6 and 1.7

doc/lua-api/index.rst
src/hlua.c

index e04c5b5a75a7b2f7a14c399669cf5e8ca5c3841c..113aad631595dcce96e2ad42d9bca63042efb8ee 100644 (file)
@@ -1863,7 +1863,7 @@ Map class
   default = "usa"
 
   -- Create and load map
-  geo = Map.new("geo.map", Map.ip);
+  geo = Map.new("geo.map", Map._ip);
 
   -- Create new fetch that returns the user country
   core.register_fetches("country", function(txn)
@@ -1888,60 +1888,76 @@ Map class
     return loc;
   end);
 
-.. js:attribute:: Map.int
+.. js:attribute:: Map._int
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.ip
+  Note that :js:attr:`Map.int` is also available for compatibility.
+
+.. js:attribute:: Map._ip
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.str
+  Note that :js:attr:`Map.ip` is also available for compatibility.
+
+.. js:attribute:: Map._str
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.beg
+  Note that :js:attr:`Map.str` is also available for compatibility.
+
+.. js:attribute:: Map._beg
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.sub
+  Note that :js:attr:`Map.beg` is also available for compatibility.
+
+.. js:attribute:: Map._sub
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.dir
+  Note that :js:attr:`Map.sub` is also available for compatibility.
+
+.. js:attribute:: Map._dir
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.dom
+  Note that :js:attr:`Map.dir` is also available for compatibility.
+
+.. js:attribute:: Map._dom
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.end
+  Note that :js:attr:`Map.dom` is also available for compatibility.
+
+.. js:attribute:: Map._end
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
-.. js:attribute:: Map.reg
+.. js:attribute:: Map._reg
 
   See the HAProxy configuration.txt file, chapter "Using ACLs and fetching
   samples" ans subchapter "ACL basics" to understand this pattern matching
   method.
 
+  Note that :js:attr:`Map.reg` is also available for compatibility.
+
 
 .. js:function:: Map.new(file, method)
 
@@ -1951,10 +1967,10 @@ Map class
   :param integer method: Is the map pattern matching method. See the attributes
     of the Map class.
   :returns: a class Map object.
-  :see: The Map attributes: :js:attr:`Map.int`, :js:attr:`Map.ip`,
-    :js:attr:`Map.str`, :js:attr:`Map.beg`, :js:attr:`Map.sub`,
-    :js:attr:`Map.dir`, :js:attr:`Map.dom`, :js:attr:`Map.end` and
-    :js:attr:`Map.reg`.
+  :see: The Map attributes: :js:attr:`Map._int`, :js:attr:`Map._ip`,
+    :js:attr:`Map._str`, :js:attr:`Map._beg`, :js:attr:`Map._sub`,
+    :js:attr:`Map._dir`, :js:attr:`Map._dom`, :js:attr:`Map._end` and
+    :js:attr:`Map._reg`.
 
 .. js:function:: Map.lookup(map, str)
 
index bfb9c941817f8dc642d687818548f5720aa0ff8f..41f1805d9a135694fc16e83e9df8d002cba5e43a 100644 (file)
@@ -7258,6 +7258,10 @@ void hlua_init(void)
        /* register pattern types. */
        for (i=0; i<PAT_MATCH_NUM; i++)
                hlua_class_const_int(gL.T, pat_match_names[i], i);
+       for (i=0; i<PAT_MATCH_NUM; i++) {
+               snprintf(trash.str, trash.size, "_%s", pat_match_names[i]);
+               hlua_class_const_int(gL.T, trash.str, i);
+       }
 
        /* register constructor. */
        hlua_class_function(gL.T, "new", hlua_map_new);