ImageMagick maybe broken by libgs9 upgrade

Marco Atzeri marco.atzeri@gmail.com
Tue Jun 23 21:02:51 GMT 2020


On 23.06.2020 22:56, Ken Brown via Cygwin wrote:
> On 6/23/2020 2:18 PM, Ken Brown via Cygwin wrote:
>> On 6/23/2020 12:56 PM, Marco Atzeri via Cygwin wrote:
>>> On 23.06.2020 15:03, Markus Hoenicka wrote:
>>>> On 2020-06-23 14:15, Ken Brown via Cygwin was heard to say:
>>>>> On 6/23/2020 7:27 AM, Ken Brown via Cygwin wrote:
>>>>>> On 6/22/2020 9:37 PM, Emily via Cygwin wrote:
>>>
>>>>>>>
>>>>>>> But in case other ImageMagick functionality is also broken, this 
>>>>>>> isn't a permanent solution.  I tried to downgrade libgs9, but 
>>>>>>> 9.27 is no longer an option in setup, even after I added another 
>>>>>>> mirror.
>>>>>>
>>>>>> Please provide a sample label.pdf for which you're seeing this 
>>>>>> behavior.
>>>>>
>>>>> You could also try adding the '-verbose' option to your command line
>>>>> to see if that gives a clue.
>>>>>
>>>>> Ken
>>>>
>>>> Hi,
>>>>
>>>> I don't know whether this helps to track down the problem, but here 
>>>> goes anyway: I see the same crash with .ps and .eps files 
>>>> (unsurprisingly, as these and .pdf are processed by libgs). The same 
>>>> conversions work with "gm convert" from the GraphicsMagick package. 
>>>> gm is not linked against libgs, but seems to invoke the gs 
>>>> executable instead. This does not crash, although it is linked 
>>>> against the very same libgs.
>>>>
>>>> regards,
>>>> Markus
>>>>
>>>
>>>
>>> without a sample case we don't know if we need to rebuild ImageMagick
>>> or GS
>>
>> I found a .eps file with which I could reproduce the crash (attached), 
>> using the OP's command line with her .pdf file replaced by the 
>> attached .eps file.  Here's the gdb backtrace after the crash:
>>
>> Thread 1 "convert" received signal SIGSEGV, Segmentation fault.
>> gs_lib_ctx_init (ctx=ctx@entry=0xfffeed30, mem=mem@entry=0x8000987b0)
>>      at /usr/src/debug/ghostscript-9.52-2/base/gslibctx.c:269
>> 269             gx_monitor_enter((gx_monitor_t *)(pio->core->monitor));
>> (gdb) bt
>> #0  gs_lib_ctx_init (ctx=ctx@entry=0xfffeed30, mem=mem@entry=0x8000987b0)
>>      at /usr/src/debug/ghostscript-9.52-2/base/gslibctx.c:269
>> #1  0x00000003ca37e0a3 in gs_malloc_init_with_context (ctx=0xfffeed30)
>>      at /usr/src/debug/ghostscript-9.52-2/base/gsmalloc.c:595
>> #2  0x00000003ca439da6 in psapi_new_instance (pinstance=0xfffee938,
>>      caller_handle=0xfffee930)
>>      at /usr/src/debug/ghostscript-9.52-2/psi/psapi.c:92
>> #3  0x00000003ca49e995 in gsapi_new_instance (pinstance=<optimized out>,
>>      caller_handle=<optimized out>)
>>      at /usr/src/debug/ghostscript-9.52-2/psi/iapi.c:64
>> #4  0x00000003fd2f53dc in InvokePostscriptDelegate (verbose=MagickFalse,
>>      command=command@entry=0xfffeed30 "'gs' -sstdout=%stderr -dQUIET 
>> -dSAFER -dBAT
>> CH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 
>> -dGridFitTT=2 '-s
>> DEVICE=pngalpha' -dTextAlphaBits=4 -dGraphicsAlphaBits=4 '-r300x300' 
>> -g196x2"...,
>>   message=message@entry=0xffff3d30 "", 
>> exception=exception@entry=0x8000664a0)
>>      at /usr/src/debug/ImageMagick-6.9.10.11-2/coders/ps.c:237
>> #5  0x00000003fd2f6234 in ReadPSImage (image_info=0x800076170,
>>      exception=0x8000664a0)
>>      at /usr/src/debug/ImageMagick-6.9.10.11-2/coders/ps.c:846
>>
>> The crash occurs because of an attempt to access ridiculously high 
>> memory:
>>
>> (gdb) p pio->core
>> $8 = (gs_lib_ctx_core_t *) 0x73253d74756f6474
>>
>> I'm looking into it.
> 
> I think I've found the problem, although it will take patching and 
> rebuilding ImageMagick (which I haven't done) to confirm that I'm right.
> 
> In the ImageMagick source file coders/ps.c:237, there's a call to 
> ghost_info->new_instance, a.k.a. gsapi_new_instance (see line 214).  The 
> documentation of the latter in the ghostscript sources (psi/iapi.c:57) 
> says that the first argument pinstance should satisfy *pinstance == NULL 
> in the first call to that function.
> 
> But *pinstance in this call is the variable 'interpreter', defined 
> without initialization in ps.c:191.  As a result, **pinstance contains 
> garbage, and the program eventually crashes when it tries to dereference 
> a garbage pointer.
> 
> The fix, if I'm right, is to initialize interpreter to NULL in ps.c:191.
> 
> Ken

Noted.

Regards
MArco



More information about the Cygwin mailing list