Browse Source

Add parameter checking in var_get

bel 11 years ago
parent
commit
9bb13c9232
2 changed files with 19 additions and 10 deletions
  1. 15 8
      src/mod_lua.inl
  2. 4 2
      test/page3.lua

+ 15 - 8
src/mod_lua.inl

@@ -352,15 +352,22 @@ static int lsp_get_var(lua_State *L)
     int ret;
     char dst[512];
 
-    data = lua_tolstring(L, 1, &data_len);
-    var_name = lua_tostring(L, 2);
-    occurrence = (params>2) ? (long)lua_tonumber(L, 3) : 0;
-
-    ret = mg_get_var2(data, data_len, var_name, dst, sizeof(dst), occurrence);
-    if (ret>=0) {
-        lua_pushstring(L, dst);
+    if (params>=2 && params<=3) {
+        data = lua_tolstring(L, 1, &data_len);
+        var_name = lua_tostring(L, 2);
+        occurrence = (params>2) ? (long)lua_tonumber(L, 3) : 0;
+
+        ret = mg_get_var2(data, data_len, var_name, dst, sizeof(dst), occurrence);
+        if (ret>=0) {
+            /* Variable found: return value to Lua */
+            lua_pushstring(L, dst);
+        } else {
+            /* Variable not found (TODO: may be string too long) */
+            lua_pushnil(L);
+        }
     } else {
-        lua_pushnil(L);
+        /* Syntax error */
+        return luaL_error(L, "invalid get_var() call");
     }
     return 1;
 }

+ 4 - 2
test/page3.lua

@@ -23,8 +23,10 @@ else
         mg.write("Connection: close\r\n")
         mg.write("Content-Type: text/html; charset=utf-8\r\n")
         mg.write("\r\n")
-        mg.write("<html><head><title>Civetweb Lua script test page 3</title></head>\r\n")
-        mg.write("<body>Query string does not contain a 'file' variable.<br>Try 'file=page3.lua&somevar=something'</body></html>\r\n")
+        mg.write("<html>\r\n<head><title>Civetweb Lua script test page 3</title></head>\r\n")
+        mg.write("<body>\r\nQuery string does not contain a 'file' variable.<br>\r\n")
+        mg.write("Try <a href=\"?file=page3.lua&somevar=something\">?file=page3.lua&somevar=something</a>\r\n")
+        mg.write("</body>\r\n</html>\r\n")
     else
         filename = mg.document_root .. "/" .. file
         mg.send_file(filename)