Ошибка в GraphicsMagick

обнаружилась тут давеча омерзительная вещь, при создании скриншотов gm import начисто игнорирует опцию -frame, и вообще не желает включать обрамление окон в скриншот. причем гадость эта проявляется только при выборе окна мышью. если явно указывать id, к примеру предварительно узнав его через xwininfo -frame, все делается корректно.

пришлось лезть в исходники. сначала я грешил на некорректную работу XQueryTree, но потом все оказалось значительно тривиальнее. классический use after free при разборе данной опции.

ну и исправление

--- graphicsmagick-1.3.25/magick/command.c.orig	2017-01-28 09:31:07.000000000 +0200
+++ graphicsmagick-1.3.25/magick/command.c	2017-01-28 09:33:42.965126294 +0200
@@ -15669,9 +15669,9 @@
       {
         if (LocaleCompare("frame",option+1) == 0)
           {
+            ximage_info.frame=(*option == '-');
             MagickFreeMemory(argv[i]);
             argv[i]=AcquireString("-ignore");  /* resolve option confict */
-            ximage_info.frame=(*option == '-');
             break;
           }
         MagickFatalError(OptionFatalError,UnrecognizedOption,option);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *