Software /
code /
prosody
Changeset
1678:79eb903d0e67
Using pcall to make save the rest from zlib fails. Emit errors on those fails.
author | Tobias Markmann <tm@ayena.de> |
---|---|
date | Thu, 13 Aug 2009 13:20:32 +0200 |
parents | 1677:f0961ce9830c |
children | 1679:e2eb0eaf2544 |
files | plugins/mod_compression.lua |
diffstat | 1 files changed, 39 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/plugins/mod_compression.lua Thu Aug 13 12:05:33 2009 +0200 +++ b/plugins/mod_compression.lua Thu Aug 13 13:20:32 2009 +0200 @@ -7,7 +7,8 @@ local st = require "util.stanza"; local zlib = require "zlib"; -local print = print +local print = print; +local pcall = pcall; local xmlns_compression_feature = "http://jabber.org/features/compress" local xmlns_compression_protocol = "http://jabber.org/protocol/compress" @@ -45,14 +46,38 @@ session:reset_stream(); -- create deflate and inflate streams - local deflate_stream = zlib.deflate(compression_level); - local inflate_stream = zlib.inflate(); + local status, deflate_stream = pcall(zlib.deflate, compression_level); + if status == false then + local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); + session.send(error_st); + session:log("error", "Failed to create zlib.deflate filter."); + module:log("error", inflate_stream); + return + end + + local status, inflate_stream = pcall(zlib.inflate); + if status == false then + local error_st = st.stanza("failure", {xmlns=xmlns_compression_protocol}):tag("setup-failed"); + session.send(error_st); + session:log("error", "Failed to create zlib.deflate filter."); + module:log("error", inflate_stream); + return + end -- setup compression for session.w local old_send = session.send; session.send = function(t) - local compressed, eof = deflate_stream(tostring(t), 'sync'); + local status, compressed, eof = pcall(deflate_stream, tostring(t), 'sync'); + if status == false then + session:close({ + condition = "undefined-condition"; + text = compressed; + extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); + }); + module:log("error", compressed); + return; + end old_send(compressed); end; @@ -60,7 +85,16 @@ local function setup_decompression(session) local old_data = session.data session.data = function(conn, data) - local decompressed, eof = inflate_stream(data); + local status, decompressed, eof = pcall(inflate_stream, data); + if status == false then + session:close({ + condition = "undefined-condition"; + text = compressed; + extra = st.stanza("failure", {xmlns="http://jabber.org/protocol/compress"}):tag("processing-failed"); + }); + module:log("error", compressed); + return; + end old_data(conn, decompressed); end; end