Software /
code /
prosody
Annotate
spec/util_encodings_spec.lua @ 11665:148075532021
net.server_epoll: Prevent stack overflow of opportunistic writes
net.http.files serving a big enough file on a fast enough connection
with opportunistic_writes enabled could trigger a stack overflow through
repeatedly serving more data that immediately gets sent, draining the
buffer and triggering more data to be sent. This also blocked the server
on a single task until completion or an error.
This change prevents nested opportunistic writes, which should prevent
the stack overflow, at the cost of reduced download speed, but this is
unlikely to be noticeable outside of Gbit networks. Speed at the cost of
blocking other processing is not worth it, especially with the risk of
stack overflow.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 11 Jul 2021 09:39:21 +0200 |
parent | 8373:af7b41a0ec9e |
rev | line source |
---|---|
8236
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
2 local encodings = require "util.encodings"; |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
3 local utf8 = assert(encodings.utf8, "no encodings.utf8 module"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 |
8367
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
5 describe("util.encodings", function () |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
6 describe("#encode()", function() |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
7 it("should work", function () |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
8 assert.is.equal(encodings.base64.encode(""), ""); |
8371
09a1ce618ad0
spec/util.encodings: Fix syntax
Kim Alvefur <zash@zash.se>
parents:
8370
diff
changeset
|
9 assert.is.equal(encodings.base64.encode('coucou'), "Y291Y291"); |
8367
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
10 assert.is.equal(encodings.base64.encode("\0\0\0"), "AAAA"); |
8372
872efae6e222
spec/util.encodings: Test an UTF-8 sequence
Kim Alvefur <zash@zash.se>
parents:
8371
diff
changeset
|
11 assert.is.equal(encodings.base64.encode("\255\255\255"), "////"); |
8367
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
12 end); |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
13 end); |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
14 describe("#decode()", function() |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
15 it("should work", function () |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
16 assert.is.equal(encodings.base64.decode(""), ""); |
8373
af7b41a0ec9e
spec/util.encodings: Test a lonly padding (can appear like this in SASL)
Kim Alvefur <zash@zash.se>
parents:
8372
diff
changeset
|
17 assert.is.equal(encodings.base64.decode("="), ""); |
8371
09a1ce618ad0
spec/util.encodings: Fix syntax
Kim Alvefur <zash@zash.se>
parents:
8370
diff
changeset
|
18 assert.is.equal(encodings.base64.decode('Y291Y291'), "coucou"); |
8367
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
19 assert.is.equal(encodings.base64.decode("AAAA"), "\0\0\0"); |
8372
872efae6e222
spec/util.encodings: Test an UTF-8 sequence
Kim Alvefur <zash@zash.se>
parents:
8371
diff
changeset
|
20 assert.is.equal(encodings.base64.decode("////"), "\255\255\255"); |
8367
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
21 end); |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
22 end); |
60eb22fd21b8
spec/util.encodings: Add some base64 tests (Thanks Link Mavue)
Kim Alvefur <zash@zash.se>
parents:
8236
diff
changeset
|
23 end); |
8236
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 describe("util.encodings.utf8", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 describe("#valid()", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 it("should work", function() |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 for line in io.lines("spec/utf8_sequences.txt") do |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 local data = line:match(":%s*([^#]+)"):gsub("%s+", ""):gsub("..", function (c) return string.char(tonumber(c, 16)); end) |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 local expect = line:match("(%S+):"); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 assert(expect == "pass" or expect == "fail", "unknown expectation: "..line:match("^[^:]+")); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
33 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 local valid = utf8.valid(data); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 assert.is.equal(valid, utf8.valid(data.." ")); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 assert.is.equal(valid, expect == "pass", line); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 end |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
38 |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
39 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
40 end); |
4878e4159e12
Port tests to the `busted` test runner
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 end); |