Software / code / prosody
Annotate
tools/generate_format_spec.lua @ 13854:0b01f40df0f9 13.0
mod_http_file_share: Add media-src 'self' to Content-Security-Policy header
This allows certain media files to be loaded when navigated to directly in a
web browser.
Note that in some browsers (Chrome), the media gets transformed
internally into a HTML page with some basic styles, but these are blocked due
to our default-src policy of 'none' Although this could be unblocked with
style-src unsafe-inline, it is not our plan to fix this, because this would
have negative security implications.
The reason for our CSP is to prevent the file share service from being used to
host malicious HTML/CSS/JS. Yes, CSS can be malicious.
Our file share service is for uploading and downloading files, it is not a
substitute for website/content hosting.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 18 Apr 2025 12:25:06 +0100 |
| parent | 12039:e0a8c5b1ab4f |
| rev | line source |
|---|---|
| 12034 | 1 local format = require"util.format".format; |
|
12037
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
2 local dump = require"util.serialization".new("oneline") |
| 12034 | 3 local types = { |
| 4 "nil"; | |
| 5 "boolean"; | |
| 6 "number"; | |
| 7 "string"; | |
| 8 "function"; | |
| 9 -- "userdata"; | |
| 10 "thread"; | |
| 11 "table"; | |
| 12 }; | |
| 13 local example_values = { | |
| 14 ["nil"] = { n = 1; nil }; | |
| 15 ["boolean"] = { true; false }; | |
|
12037
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
16 ["number"] = { 97; -12345; 1.5; 73786976294838206464; math.huge; 2147483647 }; |
|
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
17 ["string"] = { "hello"; "foo \1\2\3 bar"; "nödåtgärd"; string.sub("nödåtgärd", 1, -4) }; |
| 12034 | 18 ["function"] = { function() end }; |
| 19 -- ["userdata"] = {}; | |
| 20 ["thread"] = { coroutine.create(function() end) }; | |
|
12039
e0a8c5b1ab4f
util.format: Ensure metatable __tostring results are also sanitized
Kim Alvefur <zash@zash.se>
parents:
12037
diff
changeset
|
21 ["table"] = { {}, setmetatable({},{__tostring=function ()return "foo \1\2\3 bar"end}) }; |
| 12034 | 22 }; |
| 23 local example_strings = setmetatable({ | |
| 24 ["nil"] = { "nil" }; | |
| 25 ["function"] = { "function() end" }; | |
|
12037
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
26 ["number"] = { "97"; "-12345"; "1.5"; "73786976294838206464"; "math.huge"; "2147483647" }; |
| 12034 | 27 ["thread"] = { "coroutine.create(function() end)" }; |
|
12039
e0a8c5b1ab4f
util.format: Ensure metatable __tostring results are also sanitized
Kim Alvefur <zash@zash.se>
parents:
12037
diff
changeset
|
28 ["table"] = { "{ }", "setmetatable({},{__tostring=function ()return \"foo \\1\\2\\3 bar\"end})" } |
| 12034 | 29 }, { __index = function() return {} end }); |
| 30 for _, lua_type in ipairs(types) do | |
| 31 print(string.format("\t\tdescribe(\"%s\", function ()", lua_type)); | |
| 32 local examples = example_values[lua_type]; | |
| 33 for fmt in ("cdiouxXaAeEfgGqs"):gmatch(".") do | |
| 34 print(string.format("\t\t\tdescribe(\"to %%%s\", function ()", fmt)); | |
| 35 print("\t\t\t\tit(\"works\", function ()"); | |
|
12037
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
36 for i = 1, examples.n or #examples do |
| 12034 | 37 local example = examples[i]; |
| 38 if not tostring(example):match("%w+: 0[xX]%x+") then | |
|
12037
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
39 print(string.format("\t\t\t\t\tassert.equal(%q, format(%q, %s))", format("%" .. fmt, example), "%" .. fmt, |
|
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
40 example_strings[lua_type][i] or dump(example))); |
| 12034 | 41 else |
|
12037
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
42 print(string.format("\t\t\t\t\tassert.matches(\"[%s: 0[xX]%%x+]\", format(%q, %s))", lua_type, "%" .. fmt, |
|
82f6a0b0a425
tools/generate_format_spec: Apply lua-format to silence luacheck
Kim Alvefur <zash@zash.se>
parents:
12034
diff
changeset
|
43 example_strings[lua_type][i] or dump(example))); |
| 12034 | 44 end |
| 45 end | |
| 46 print("\t\t\t\tend);"); | |
| 47 print("\t\t\tend);"); | |
| 48 print() | |
| 49 end | |
| 50 print("\t\tend);"); | |
| 51 print() | |
| 52 end |