From bec235c8d6c1c4797cfc18804e0658a7b17a05d9 Mon Sep 17 00:00:00 2001 From: Sebastian Serth Date: Wed, 7 Dec 2022 23:00:21 +0100 Subject: [PATCH] Fix XML parsing with invalid LTI response An invalid XML response may be returned if the LTI provider is unavailable and cannot handle our request. We decided against logging in Sentry as this affects a third party functionality we cannot fix ourselves. Fixes CODEOCEAN-G2 --- app/controllers/concerns/lti.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/app/controllers/concerns/lti.rb b/app/controllers/concerns/lti.rb index 0592b3da..30fb692e 100644 --- a/app/controllers/concerns/lti.rb +++ b/app/controllers/concerns/lti.rb @@ -170,8 +170,14 @@ module Lti # Reduce score by 100% normalized_lit_score *= 0.0 end - response = provider.post_replace_result!(normalized_lit_score) - {code: response.response_code, message: response.post_response.body, status: response.code_major, score_sent: normalized_lit_score} + + begin + response = provider.post_replace_result!(normalized_lit_score) + {code: response.response_code, message: response.post_response.body, status: response.code_major, score_sent: normalized_lit_score} + rescue IMS::LTI::XMLParseError + # A parsing error might happen if the LTI provider is down and doesn't return a valid XML response + {status: 'error'} + end else {status: 'unsupported'} end