Re: How should the image widget work?

Michiel ten Hagen <[email protected]> Wed, 19 Jan 2005 10:06:25 +0100
Newsgroups gmane.comp.graphics.y.devel
Message-ID <[email protected]>
Phil wrote:
> Andy wrote this in another thread I suspect everyone's stopped reading 
> by now, but because it's useful I'm going to start another thread to 
> discuss it:
> 
>> I'd suck in libMagick (from imagemagick) and let that do all the grunt
>> work. It should support any still image formats you can shake a stick
>> at, and it has all the interesting transformations already. Not sure
>> offhand whether to load it server- or client-side. Maybe it would be
>> worthwhile to construct a widget that does *both*, and lets user-level
>> server configuration pick which way to use (I have some plans for how
>> this part will work; it's needed for just about everything and will
>> probably be critical in the long run); I can think of scenarios where
>> both forms would be useful.


> 
> Indeed.  However I can think of scenarios where the server-side version 
> is more dangerous.
> 
>  From a performance standpoint it's best to keep the image in its 
> original form for as long as possible, as this will allow any display 
> driver with (full or partial) hardware whatever-it-is decoding 
> facilities to take full advantage of them.  This is becoming more of a 
> factor as Pixel Shader technology gets more advanced and it becomes 
> possible to code your own decode routines to run in the graphics 
> processing system rather than consuming general resources.  Even 
> ignoring that, most cards from the original Radeon onwards have an 
> onboard iDCT circuit which can be used to help decompress JPEGs.  I'm 
> not suggesting we try and write such a driver yet, just that the 
> architecture we use should allow us to do so in the future.
> 
> The biggest obstacle I can see to server-side image rendering is that it 
> would be relatively easy for us (or of course the libMagick crew) to 
> introduce a bug which allowed one client to alter the image resources of 
> another.  This would be a big security problem (as you could 
> misrepresent data), and would be less likely to crop up if we had a 
> simpler server-side widget and put the complexity in the client.  The 
> recent(ish) JPEG-rendering-related security holes in a lot of software 
> show how easy it is for this kind of thing to creep in.
> 
> I'm not suggesting we're more likely to introduce security holes than 
> anyone else, just that we're no less likely to do so.
> 
> A compromise would be to use the server-side widget if the uid of the 
> client process matches the uid of the server process, that should at 
> least stop malicious images interfering with privileged programs.
> 
> Thoughts?
> 
> Phil
> 
> 

Using libMagick will create an extra dependency. I believe this should
be prevented. Using libMagick on the client side isnt a problem ofcourse.

An image widget should be just an RGBA buffer in principle. Widgets
implementing decompression of specific formats should be seperated.
Separating image specific widgets would also alllow that Y can be
compiled without these widgets to save memory if Y would be used in
embedded systems.

If widgets are seperated libMagick could be used.

Just a few thought,

Michiel