Mercurial > prosody-hg
view spec/util_ringbuffer_spec.lua @ 14205:a874c3f4570a 13.0
util.startup: Always apply umask (thanks Max Hearnden)
Commit c673ff1075bd removed mod_posix, and moved functionality into
util.startup, including applying a secure umask at runtime. However, the
new function was not called from the startup sequence, leading Prosody to run
with whatever umask it inherited from the environment.
Prosody Debian packages ship with a secure umask 027 in the systemd unit file
for the prosody service, so Debian systems using systemd are not affected.
prosodyctl calls the switch_user() function during startup, which would set
the umask, so prosodyctl commands which created files were unaffected.
This change makes both prosody and prosodyctl unconditionally set a secure
umask during the startup process.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Thu, 28 May 2026 17:25:46 +0100 |
| parents | 67b68147ed1d |
| children |
line wrap: on
line source
local rb = require "util.ringbuffer"; describe("util.ringbuffer", function () describe("#new", function () it("has a constructor", function () assert.Function(rb.new); end); it("can be created", function () assert.truthy(rb.new()); end); it("won't create an empty buffer", function () assert.has_error(function () rb.new(0); end); end); it("won't create a negatively sized buffer", function () assert.has_error(function () rb.new(-1); end); end); end); describe(":write", function () local b = rb.new(); it("works", function () assert.truthy(b:write("hi")); end); end); describe(":discard", function () local b = rb.new(); it("works", function () assert.truthy(b:write("hello world")); assert.truthy(b:discard(6)); assert.equal(5, #b); assert.equal("world", b:read(5)); end); end); describe(":find", function () local function test_find(b, str, expected) if expected ~= nil then assert.equal(expected, b:find(str)); else assert.is_nil(b:find(str)); end end it("works", function () local b = rb.new(); assert.truthy(b:write("hello world")); test_find(b, "world", 7); end); it("works across wraps", function () local b = rb.new(5); assert.truthy(b:write("12345")); assert.equal("123", b:read(3)); assert.truthy(b:write("678")); test_find(b, "45678", 1); test_find(b, "567", 2); test_find(b, "56", 2); test_find(b, "5", 2); test_find(b, "6", 3); test_find(b, "7", 4); test_find(b, "8", 5); test_find(b, "9", nil); end); it("no match when the needle is larger than the buffer", function () for i = 5, 11 do local b = rb.new(i); assert.truthy(b:write("hello")); test_find(b, "hello world", nil); end end); it("no match when the needle is an empty string", function () local b = rb.new(5); assert.truthy(b:write("hello")); test_find(b, "", nil); end); end); describe(":sub", function () -- Helper function to compare buffer:sub() with string:sub() local function test_sub(b, x, y) local s = b:read(#b, true); local string_result, buffer_result = s:sub(x, y), b:sub(x, y); assert.equals(string_result, buffer_result, ("buffer:sub(%d, %s) does not match string:sub()"):format(x, y and ("%d"):format(y) or "nil")); end it("works", function () local b = rb.new(); assert.truthy(b:write("hello world")); assert.equals("hello", b:sub(1, 5)); end); it("supports optional end parameter", function () local b = rb.new(); assert.truthy(b:write("hello world")); assert.equals("hello world", b:sub(1)); assert.equals("world", b:sub(-5)); end); it("is equivalent to string:sub", function () local b = rb.new(6); assert.truthy(b:write("foobar")); b:read(3); b:write("foo"); for i = -13, 13 do for j = -13, 13 do test_sub(b, i, j); end end end); end); describe(":byte", function () -- Helper function to compare buffer:byte() with string:byte() local function test_byte(b, x, y) local s = b:read(#b, true); local string_result, buffer_result = {s:byte(x, y)}, {b:byte(x, y)}; assert.same(string_result, buffer_result, ("buffer:byte(%d, %s) does not match string:byte()"):format(x, y and ("%d"):format(y) or "nil")); end it("is equivalent to string:byte", function () local b = rb.new(6); assert.truthy(b:write("foobar")); b:read(3); b:write("foo"); test_byte(b, 1); test_byte(b, 3); test_byte(b, -1); test_byte(b, -3); for i = -13, 13 do for j = -13, 13 do test_byte(b, i, j); end end end); it("works with characters > 127", function () local b = rb.new(); b:write(string.char(0, 140)); local r = { b:byte(1, 2) }; assert.same({ 0, 140 }, r); end); end); end);
