From 8a1d5ba8a0e331eca846cfc723dd839ece9598f6 Mon Sep 17 00:00:00 2001
From: Gustavo Trott <gustavo@trott.com.br>
Date: Wed, 31 Mar 2021 14:21:00 -0300
Subject: [PATCH] Handle and log timeout error during Office2Pdf conversion

---
 .../presentation/imp/Office2PdfPageConverter.java      | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/Office2PdfPageConverter.java b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/Office2PdfPageConverter.java
index c8ca293cfa..0253b9af72 100755
--- a/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/Office2PdfPageConverter.java
+++ b/bbb-common-web/src/main/java/org/bigbluebutton/presentation/imp/Office2PdfPageConverter.java
@@ -59,18 +59,22 @@ public abstract class Office2PdfPageConverter {
 
       log.info(String.format("Calling conversion script %s.", presOfficeConversionExec));
 
-      NuProcessBuilder officeConverterExec = new NuProcessBuilder(Arrays.asList(presOfficeConversionExec, presentationFile.getAbsolutePath(), output.getAbsolutePath()));
+      NuProcessBuilder officeConverterExec = new NuProcessBuilder(Arrays.asList("timeout", conversionTimeout + "s", "/bin/sh", "-c",
+              "\""+presOfficeConversionExec + "\" \"" + presentationFile.getAbsolutePath() + "\" \"" + output.getAbsolutePath()+"\""));
       Office2PdfConverterHandler office2PdfConverterHandler  = new Office2PdfConverterHandler();
-
       officeConverterExec.setProcessListener(office2PdfConverterHandler);
 
       NuProcess process = officeConverterExec.start();
       try {
-        process.waitFor(conversionTimeout, TimeUnit.SECONDS);
+        process.waitFor(conversionTimeout + 1, TimeUnit.SECONDS);
       } catch (InterruptedException e) {
         log.error("InterruptedException while counting PDF pages {}", presentationFile.getName(), e);
       }
 
+      if(office2PdfConverterHandler.isCommandTimeout()) {
+        log.error("Command execution ({}) exceeded the {} secs timeout for {}.",presOfficeConversionExec, conversionTimeout, presentationFile.getName());
+      }
+
       if(!office2PdfConverterHandler.isCommandSuccessful()) {
         throw new Exception(String.format("Error while executing conversion script %s.", presOfficeConversionExec));
       }
-- 
GitLab