Project

General

Profile

Actions

Defect #34046

open

Escaping symbols in task subject can broke export to Gantt (PNG)

Added by Kirill Trofimov almost 4 years ago. Updated 10 months ago.

Status:
Needs feedback
Priority:
Normal
Assignee:
-
Category:
Gantt
Start date:
Due date:
% Done:

0%

Estimated time:
Resolution:
Affected version:

Description

Hello there, I think i found a problem with export Gantt to PNG. When I have task's subject with escape characters for example: "Student's Problems with new login page" I receive error (from Redmine logs):

MiniMagick::Error (`convert -size 1125x926 xc:white -stroke transparent -fill black -stroke transparent 
...
-strokewidth 1 -draw text 84,418 'Student'"'"'s Problems with new login page' -fill 
...
red -draw line 516,36 516,925 /tmp/mini_magick20200929-4913-1ne7j9r.png` failed with error:
convert-im6.q16: non-conforming drawing primitive definition `'' @ error/draw.c/RenderMVGContent/4301.
):

lib/redmine/helpers/gantt.rb:381:in `to_image'
app/controllers/gantts_controller.rb:44:in `block (2 levels) in show'
app/controllers/gantts_controller.rb:42:in `show'
lib/redmine/sudo_mode.rb:65:in `sudo_mode'

And when I except this task by filters from Gantt everything is fine. Is there any chances to fix this issue?


Files

fixed-34046.patch (2.52 KB) fixed-34046.patch Yuichi HARADA, 2020-09-30 09:34

Related issues

Related to Redmine - Feature #30492: Replace RMagick with MiniMagickClosedGo MAEDA

Actions
Related to Redmine - Defect #38728: Correctly escape issue text in Gantt PNG export for ImageMagick convertClosedGo MAEDA

Actions
Actions #1

Updated by Go MAEDA almost 4 years ago

  • Status changed from New to Confirmed
Actions #2

Updated by Yuichi HARADA almost 4 years ago

It used Redmine::Utils::Shell.shell_quote to escape the subject string, but it was an escaping for the string that cannot be handled by the magick-convert command.
I fixed the special character escaping process as follows.

diff --git a/lib/redmine/helpers/gantt.rb b/lib/redmine/helpers/gantt.rb
index 31956bfae..168ce43f7 100644
--- a/lib/redmine/helpers/gantt.rb
+++ b/lib/redmine/helpers/gantt.rb
@@ -400,7 +400,7 @@ module Redmine
             gc.stroke('transparent')
             gc.strokewidth(1)
             gc.draw('text %d,%d %s' % [
-              left.round + 8, 14, Redmine::Utils::Shell.shell_quote("#{month_f.year}-#{month_f.month}")
+              left.round + 8, 14, image_text_quote("#{month_f.year}-#{month_f.month}")
             ])
             left = left + width
             month_f = month_f >> 1
@@ -436,7 +436,7 @@ module Redmine
               gc.stroke('transparent')
               gc.strokewidth(1)
               gc.draw('text %d,%d %s' % [
-                left.round + 2, header_height + 14, Redmine::Utils::Shell.shell_quote(week_f.cweek.to_s)
+                left.round + 2, header_height + 14, image_text_quote(week_f.cweek.to_s)
               ])
               left = left + width
               week_f = week_f + 7
@@ -797,7 +797,7 @@ module Redmine
         params[:image].stroke('transparent')
         params[:image].strokewidth(1)
         params[:image].draw('text %d,%d %s' % [
-          params[:indent], params[:top] + 2, Redmine::Utils::Shell.shell_quote(subject)
+          params[:indent], params[:top] + 2, image_text_quote(subject)
         ])
       end

@@ -1040,10 +1040,18 @@ module Redmine
         if label
           params[:image].fill('black')
           params[:image].draw('text %d,%d %s' % [
-            params[:subject_width] + (coords[:bar_end] || 0) + 5, params[:top] + 1, Redmine::Utils::Shell.shell_quote(label)
+            params[:subject_width] + (coords[:bar_end] || 0) + 5, params[:top] + 1, image_text_quote(label)
           ])
         end
       end
+
+      def image_text_quote(text)
+        if Redmine::Platform.mswin?
+          %Q!"#{text.gsub(/(")/, '\\\\\1')}"!
+        else
+          %Q!'#{text.gsub(/(')/, '\\\\\1')}'!
+        end
+      end
     end
   end
 end
Actions #3

Updated by Go MAEDA almost 4 years ago

Actions #4

Updated by Go MAEDA over 3 years ago

  • Target version set to Candidate for next minor release
Actions #5

Updated by Mischa The Evil 10 months ago

  • Status changed from Confirmed to Needs feedback

This issue seems superseded and fixed by #38728. Can someone test and confirm this? Especially 'mswin' compatibility might be an issue...

Holger Just: care to chime in?

Actions #6

Updated by Mischa The Evil 10 months ago

  • Related to Defect #38728: Correctly escape issue text in Gantt PNG export for ImageMagick convert added
Actions #7

Updated by Kirill Trofimov 10 months ago

Hello,
Unfortunately can't test it, as already this instance is out of my touch.
But anyway, thanks for supporting it.

Actions

Also available in: Atom PDF