Software /
code /
prosody-modules
Comparison
mod_rest/mod_rest.lua @ 6206:ac7e2992fe6e
mod_rest: Strip down error payloads to avoid stack overflow
When the util.error feature of including a traceback in the error,
util.json can't serialize it as it is often self-referential.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 16 Mar 2025 17:04:51 +0100 |
parent | 5993:a0d77b427d50 |
child | 6244:c71d8bc77c95 |
comparison
equal
deleted
inserted
replaced
6205:8ff8121ff603 | 6206:ac7e2992fe6e |
---|---|
660 "text/html", | 660 "text/html", |
661 "application/xmpp+xml", | 661 "application/xmpp+xml", |
662 "application/json", | 662 "application/json", |
663 }; | 663 }; |
664 | 664 |
665 -- strip some stuff, notably the optional traceback table that casues stack overflow in util.json | |
666 local function simplify_error(e) | |
667 return { | |
668 type = e.type; | |
669 condition = e.condition; | |
670 text = e.text; | |
671 extra = e.extra; | |
672 source = e.source; | |
673 }; | |
674 end | |
675 | |
665 local http_server = require "net.http.server"; | 676 local http_server = require "net.http.server"; |
666 module:hook_object_event(http_server, "http-error", function (event) | 677 module:hook_object_event(http_server, "http-error", function (event) |
667 local request, response = event.request, event.response; | 678 local request, response = event.request, event.response; |
668 local response_as = decide_type(request and request.headers.accept or "", supported_errors); | 679 local response_as = decide_type(request and request.headers.accept or "", supported_errors); |
669 if response_as == "application/xmpp+xml" then | 680 if response_as == "application/xmpp+xml" then |
682 if response then | 693 if response then |
683 response.headers.content_type = "application/json"; | 694 response.headers.content_type = "application/json"; |
684 end | 695 end |
685 return json.encode({ | 696 return json.encode({ |
686 type = "error", | 697 type = "error", |
687 error = event.error, | 698 error = simplify_error(event.error), |
688 code = event.code, | 699 code = event.code, |
689 }); | 700 }); |
690 end | 701 end |
691 end, 1); | 702 end, 1); |