aboutsummaryrefslogtreecommitdiffstats
path: root/spec
Commit message (Collapse)AuthorAgeFilesLines
* util.stanza: Add method for extracting a single attribute valueKim Alvefur2022-08-171-1/+1
| | | | | | | | | Sometimes you only care about a single attribute, but the child tag itself may be optional, leading to needing `tag and tag.attr.foo` or `stanza:find("tag@foo")`. The `:find()` method is fairly complex, so avoiding it for this kind of simpler use case is a win.
* mod_mam: Store archives with sub-second precision timestampsKim Alvefur2022-08-142-8/+8
| | | | | | | | | | | Changes sub-second part of example timestamp to .5 in order to avoid floating point issues. Some clients use timestamps when ordering messages which can lead to messages having the same timestamp ending up in the wrong order. It would be better to preserve the order messages are sent in, which is the order they were stored in.
* util.datetime: Add support for sub-second precision timestampsKim Alvefur2022-08-141-0/+13
| | | | | | Lua since 5.3 raises a fuss when time functions are handed a number with a fractional part and the underlying C functions are all based on integer seconds without support for more precision.
* util.datetime: Fix argument order in testsKim Alvefur2022-08-141-6/+6
| | | | The expected value goes first.
* various: Update IETF RFC URLs for tools.ietf.org transitionKim Alvefur2022-08-051-1/+1
| | | | | | See https://www.ietf.org/blog/finalizing-ietf-tools-transition/ Already done in various other places.
* Merge 0.12->trunkKim Alvefur2022-07-291-0/+17
|\
| * storage tests: Add test for the archive:summary APIKim Alvefur2022-07-221-0/+17
| | | | | | | | | | Passes with memory, internal, sqlite Fails with postgres as in #1766
* | Merge 0.12->trunkKim Alvefur2022-07-271-0/+27
|\|
| * mod_bookmarks: Reduce error about not having bookmarks to debug (thanks tom)Kim Alvefur2022-07-261-0/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is happens if the account is new and doesn't have any bookmarks yet, which is not a problem. Rarely seen since most clients currently use the older version of XEP-0084 stored in XEP-0049 rather than in PEP, but at least one (Converse.js )does. One scenario in which this would show up often is with Converse.js as a guest chat using anonymous authentication, where all "accounts" would always be new and not have any bookmarks. This scenario probably does not need to have mod_bookmarks at all, but if enabled globally it would likely become loaded onto the VirtualHost unless explicitly disabled.
* | compat: Remove handling of Lua 5.1 location of 'unpack' functionKim Alvefur2022-07-111-1/+1
| |
* | Merge 0.12->trunkKim Alvefur2022-07-082-3/+107
|\|
| * util.datamapper: Improve handling of schemas with non-obvious "type"Kim Alvefur2022-07-081-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | The JSON Schema specification says that schemas are objects or booleans, and that the 'type' property is optional and can be an array. This module previously allowed bare type names as schemas and did not really handle booleans. It now handles missing 'type' properties and boolean 'true' as a schema. Objects and arrays are guessed based on the presence of 'properties' or 'items' field.
| * util.jsonschema: Fix validation to not assume presence of "type" fieldKim Alvefur2022-07-081-0/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | MattJ reported a curious issue where validation did not work as expected. Primarily that the "type" field was expected to be mandatory, and thus leaving it out would result in no checks being performed. This was likely caused by misreading during initial development. Spent some time testing against https://github.com/json-schema-org/JSON-Schema-Test-Suite.git and discovered a multitude of issues, far too many to bother splitting into separate commits. More than half of them fail. Many because of features not implemented, which have been marked NYI. For example, some require deep comparisons e.g. when objects or arrays are present in enums fields. Some because of quirks with how Lua differs from JavaScript, e.g. no distinct array or object types. Tests involving fractional floating point numbers. We're definitely not going to follow references to remote resources. Or deal with UTF-16 sillyness. One test asserted that 1.0 is an integer, where Lua 5.3+ will disagree.
* | tests: Remove special-casing of Lua 5.1Kim Alvefur2022-07-022-24/+22
| | | | | | | | Part of #1600
* | util.hashes: Add SHA3 bindingsKim Alvefur2020-09-101-0/+15
| |
* | Merge 0.12->trunkKim Alvefur2022-05-081-0/+38
|\|
| * util.jsonpointer: Add basic testsKim Alvefur2022-05-081-0/+38
| | | | | | | | Example values from RFC 6901
* | Merge 0.12->trunkMatthew Wild2022-04-251-1/+1
|\|
| * util.argparse: Revise 553c6204fe5b with a different approachMatthew Wild2022-04-251-1/+1
| | | | | | | | | | | | The second return value is (not insensibly) assumed to be an error. Instead of returning a value there in the success case, copy the positional arguments into the existing opts table.
* | util.table: tests: Tests for table.move()Matthew Wild2022-03-181-0/+11
| |
* | net.resolvers.service: Honour record 'weight' when picking SRV targetsMatthew Wild2022-03-171-0/+241
| | | | | | | | #NotHappyEyeballs
* | util.poll: Expand stub testsKim Alvefur2022-03-171-3/+32
|/ | | | Because tests good.
* Spelling: Fix various spelling mistakes (thanks timeless)Kim Alvefur2022-03-072-5/+5
| | | | | | Words, sometimes I wonder how they even work Maybe I missed something.
* util.bitcompat: Add some simple testsMatthew Wild2022-03-041-0/+27
|
* net.stun: tests: Remove stray print() from debuggingMatthew Wild2022-03-041-3/+0
|
* net.stun: Add tests for serialization/deserializationMatthew Wild2022-03-041-0/+100
|
* util.hex: Deprecate to/from in favour of encode/decode, for consistency!Matthew Wild2022-03-042-20/+20
|
* util.xml: Add an option to allow <?processing instructions?>Kim Alvefur2022-02-041-0/+7
| | | | | These should generally be safe to just ignore, which should be the default behavior of Expat and LuaExpat
* util.format: Skip control code escaping when doing full serializationKim Alvefur2022-01-271-2/+7
| | | | | | Fixes that a multi-line string ended up "like\ \9this" instead of "like\nthis" as can be demonstrated by somehow initiating a connection to a HTTP server.
* util.jid: Explicitly check for nil rather than falsyKim Alvefur2022-01-151-0/+11
| | | | A boolean false should blow up.
* util.xml: Do not allow doctypes, comments or processing instructionsJonas Schäfer2022-01-101-1/+33
| | | | | | | | | | | | | | | | | | Yes. This is as bad as it sounds. CVE pending. In Prosody itself, this only affects mod_websocket, which uses util.xml to parse the <open/> frame, thus allowing unauthenticated remote DoS using Billion Laughs. However, third-party modules using util.xml may also be affected by this. This commit installs handlers which disallow the use of doctype declarations and processing instructions without any escape hatch. It, by default, also introduces such a handler for comments, however, there is a way to enable comments nontheless. This is because util.xml is used to parse human-facing data, where comments are generally a desirable feature, and also because comments are generally harmless.
* util.pubsub: Fix item store resize to "max"Kim Alvefur2022-01-061-0/+20
| | | | | Previously this would end up passing the "max" directly to the underlying storage.
* util.stanza: Cover :find method in testsKim Alvefur2021-12-311-0/+12
| | | | This method is a bit complex so good to have some test coverage
* util.stanza: Increase test coverage to cover validation errorsKim Alvefur2021-12-311-0/+25
|
* util_datamapper: Fix typo in unit testsKim Alvefur2021-12-291-1/+1
|
* util.datamapper: Add support for $ref pointersKim Alvefur2021-12-291-1/+3
| | | | Allows reuse of repetitive definitions in schemas.
* mod_tombstones: Add a very basic test caseKim Alvefur2021-12-232-0/+41
|
* mod_roster: pass correct username to roster-item-removedJonas Schäfer2021-12-221-0/+75
| | | | | | | | | | | The other invocations use it that way, and the only listener in trunk which uses it (in mod_presence) expects it that way. Passing the username of the JID from the removed entry causes incorrect unavailable presence stanzas to be sent, allegedly kicking people off MUCs. Fixes #1121.
* util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)Kim Alvefur2021-12-161-0/+26
| | | | | | There was an off-by-one in the modulo calculation. Switching to a plain old array-table makes the apparent size of the queue wrong, but since some of the queue may not be available this is likely for the best.
* util.smqueue: Abstract queue with acknowledgements and overflowKim Alvefur2021-12-141-0/+55
| | | | | | | | Meant to be used in mod_smacks for XEP-0198 Meant to have a larger virtual size than actual number of items stored, on the theory that in most cases, the excess will be acked before needed for a resumption event.
* util.format: Ensure metatable __tostring results are also sanitizedKim Alvefur2021-12-131-0/+16
|
* util.format: Fix some formats expecting positive numbers in Lua 5.2Kim Alvefur2021-12-111-4/+4
| | | | Amazing how string.format behaves differently under each Lua version
* util.format: ALL THE TESTS!!!Kim Alvefur2021-12-111-0/+842
| | | | | | The more tests I made, the more Lua 5.1 quirks I discovered. Tests generated using a tool plus some touch-up.
* util.format: Also handle the %p format added in Lua 5.4Kim Alvefur2021-12-111-0/+9
|
* util.format: Ensure sanitation of strings passed to wrong formatKim Alvefur2021-12-111-0/+1
| | | | | | | | | Ie. log("debug", "%d", "\1\2\3") should not result in garbage. Also optimizing for the common case of ASCII string passed to %s and early returns everywhere. Returning nil from a gsub callback keeps the original substring.
* util.format: Escape invalid UTF-8 by passing trough serializationKim Alvefur2021-12-101-0/+4
| | | | | | Should prevent invalid UTF-8 from making it into the logs, which can cause trouble with terminals or log viewers or other tools, such as when grep determines that log files are binary.
* MUC: Remove <{muc}x> tags in some errorsKim Alvefur2021-12-082-4/+0
| | | | | Including the payload of the stanza that caused the error is optional and we're generally not doing it anywhere else.
* MUC: Remove remaining deprecated numeric error codesKim Alvefur2021-12-081-1/+1
| | | | | | The numeric error codes seems to have been removed from the examples in XEP-0045 version 1.24, and were deprecated even by RFC 3920 in 2004, only allowed for backwards compatibility.
* util.async tests: Explicitly import match from luassert (luacheck)Matthew Wild2021-11-291-0/+1
|
* util.async: Add next-tick configurationMatthew Wild2021-11-291-0/+46
| | | | | | | | Running woken runners in the next iteration of the event loop prevents unexpected recursion, unexpected tracebacks, and is generally more predictable. The pattern is borrowed from util.promise, where we're now doing the same.