On Fri, Oct 20, 2023 at 06:29:32PM +0900, Akira Yokosawa wrote:
> Crashes of command-line Inkscape happens when it exits too soon
> before it can be properly removed from window manager's list of
> applications it is aware of.
> Glib 2.75.3 has removed GSlice allocator [1], which was permissive
> about UAF issues.
>
> Question is, "why is the command-line Inkscape registered in
> such a list in the first place?"
>
> There is mention of an option named "--without-gui" in Inkscape's
> wiki page on "Using the Command Line" [2]:
>
> The --without-gui option has been removed. Most parameters
> trigger Inkscape to run without GUI by default now. Instead
> enable GUI mode specifically using --with-gui if needed.
>
> However, current Inkscape does *initialize* itself as a GUI
> application regardless of the need of GUI.
>
> Alternatively, Inkscape can be forced to run isolated from window/
> desktop managers with bogus strings set to a couple of env variables.
>
> After some tries and errors, these two env variables turned out
> to be essential here:
>
> - XDG_RUNTIME_DIR
> - DBUS_SESSION_BUS_ADDRESS
>
> Update Makefile and set bogus strings to them, which sounds a little
> rough but should be better than ignoring error codes, after reverting
> commits:
>
> - c2f9a99366b3 ("Ignore error of unstable Inkscape")
> - a01629a5f734 ("Make sure all PDF conversions are complete")
>
> This change resolves crashes of Inkscape observed under Fedora 38,
> Fedora 39 beta, Ubuntu 23.04, and openSUSE tumbleweed.
>
> [1]: https://gitlab.gnome.org/GNOME/glib/-/issues/1079
> [2]: https://wiki.inkscape.org/wiki/index.php/Using_the_Command_Line
>
> Signed-off-by: Akira Yokosawa <[email protected]>
This issue is a bit annoying, isn't it? Thank you for persisting
with it! I have queued and pushed this patch.
Thanx, Paul
> ---
> Makefile | 14 ++++----------
> 1 file changed, 4 insertions(+), 10 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index 3875c52b..424a166c 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -111,7 +111,6 @@ INKSCAPE := $(shell $(WHICH) inkscape 2>/dev/null)
> ifdef INKSCAPE
> INKSCAPE_ONE := $(shell inkscape --version 2>/dev/null | grep -c "Inkscape
> 1")
> endif
> -IGNORE_INKSCAPE_ERROR ?= 1
> LATEXPAND := $(shell $(WHICH) latexpand 2>/dev/null)
> QPDF := $(shell $(WHICH) qpdf 2>/dev/null)
>
> @@ -267,10 +266,6 @@ endif
> autodate.tex: $(LATEXSOURCES) $(BIBSOURCES) $(LST_SOURCES) \
> $(PDFTARGETS_OF_EPS) $(PDFTARGETS_OF_SVG) $(FCVSNIPPETS)
> $(FCVSNIPPETS_VIA_LTMS) \
> $(GITREFSTAGS) utilities/autodate.sh
> -ifneq ($(IGNORE_INKSCAPE_ERROR),0)
> - # Make sure all SVG --> PDF conversions are complete
> - $(MAKE) -j1 figs
> -endif
> sh utilities/autodate.sh
>
> perfbook_flat.tex: autodate.tex
> @@ -455,6 +450,9 @@ else
> include epstopdf-rule.mk
> endif
>
> +# bogus settings for preventing Inkscape from interacting with desktop
> manager
> +ISOLATE_INKSCAPE ?= XDG_RUNTIME_DIR=na DBUS_SESSION_BUS_ADDRESS=na
> +
> $(PDFTARGETS_OF_SVG): $(FIXSVGFONTS)
> $(PDFTARGETS_OF_SVG): %.pdf: %.svg
> @echo "$< --> $(suffix $@)"
> @@ -488,11 +486,7 @@ endif
> ifeq ($(INKSCAPE_ONE),0)
> @inkscape --export-pdf=$@ $<i > /dev/null 2>&1
> else
> - ifneq ($(IGNORE_INKSCAPE_ERROR),0)
> - -@inkscape -o $@ $<i > /dev/null 2>&1
> - else
> - @inkscape -o $@ $<i > /dev/null 2>&1
> - endif
> + @$(ISOLATE_INKSCAPE) inkscape -o $@ $<i > /dev/null 2>&1
> endif
> @rm -f $<i
> ifeq ($(chkpagegroup),on)
>
> base-commit: 0ecdabe67aae15f616e4a6ffeda8c4f76ff385ae
> --
> 2.34.1
>