| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The JPEG writing code features a setjmp/longjmp pair to deal with error
handling. In doing so, it creates UB by touching local objects after the
setjmp and then after the corresponding longjmp.
The rules on what we can do are quite strict: objects that are
1) local to the function calling setjmp;
2) not qualified with volatile;
3) written into after the setjmp;
have indeterminate state after the corresponding longjmp call
(man 3 longjmp, C 2x draft N2346 §7.13.2.1.2).
Not making any assumptions on any compiler used: let's just say that
using them in any way is UB.
Luckily, no compiler exploits this (yet), and the code works just fine.
But we know the drill -- never play this game against compilers, because
you will lose.
So: we have a couple of those objects around in the writing routine
(cinfo, row_pointer), that violate the rules above.
Unfortunately we can't simply mark them as volatile: libjpeg's API
expects them not to be volatile. Casting volatileness away
and then touching an object in any way is undefined behavior out of the
bat (C 2x draft N2346 §6.7.3.7, C++ [dcl.type.cv]).
Given the code needs to do 3), and we can't work around 2), then work
around 1): define them to be non-local to the function doing the setjmp.
Introduce a small helper that declares such objects and then calls the
function doing the actual work, with the setjmp/longjmp.
An overall alternative would be of course stop using setjmp/longjmp, but
libjpeg's API doesn't really seem to allow this -- when the library
calls user's error handler, that error handler is expected not to return
to the library (so a longjmp or an exit/abort are mandatory).
Side note: all the code using libjpeg I've researched to debug
this has this very same strange issue:
* GDK-pixbuf's [1]
* ImageMagick's [2]
* and even libjpeg's [3] and libjpeg-turbo's [4] own examples.
[1] https://github.com/GNOME/gdk-pixbuf/blob/master/gdk-pixbuf/io-jpeg.c#L581
[2] https://github.com/ImageMagick/ImageMagick/blob/master/coders/jpeg.c#L2338
[3] https://www.ijg.org/
[4] https://github.com/libjpeg-turbo/libjpeg-turbo/blob/master/example.txt#L331
Change-Id: I34a810db468f73423478cd3ac71b888f4b11cb28
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
| |
The reading code protects a local variable with volatile. In this case
the only possible reason to apply volatile seems to be protecting the
variable across the subsequent setjmp/longjmp. However, the variable is
never accessed after the longjmp (the function returns). So, drop the
volatile.
Change-Id: Ibecb11a9edcc6027b2fd52b555287ad53375a5d0
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
|
|
|
|
|
|
|
| |
That way the image formats with color space supports all have both read
and write support.
Change-Id: Ib52ebd56192c4a8a0897a6afc7c4a26020319270
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|\
| |
| |
| |
| |
| |
| |
| | |
Conflicts:
src/corelib/time/qdatetime.cpp
src/widgets/widgets/qcombobox.h
Change-Id: Ib84352e8fe34aed2986a1c94e7346a46a71c803b
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The QImageIOHandler::name() has been deprecated since 5.13, but its
overrides weren't. Enabled compilation of the overrides only when the
QImageIOHandler::name() is compiled.
Task-number: QTBUG-76491
Change-Id: I8fea0032427d25bb0de01be8920c723fc21f6b7a
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
|
|/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds QColorSpace and QColorTransform classes,
and parsing of a common subset of ICC profiles
found in images, and also parses the ICC profiles
in PNG and JPEGs.
For backwards compatibility no automatic color
handling is done by this patch.
[ChangeLog][QtGui] A QColorSpace class has been added,
and color spaces are now parsed from PNG and JPEG images.
No automatic color space conversion is done however, and
applications must request it.
Change-Id: Ic09935f84640a716467fa3a9ed1e73c02daf3675
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
c:\qt\qt5\qtbase\src\3rdparty\libjpeg\src\jmorecfg.h(242): error C2371: 'boolean': redefinition; different basic types
c:\program files (x86)\windows kits\10\include\10.0.17763.0\shared\rpcndr.h(193): note: see declaration of 'boolean'
Instead of trying to guess if a certain header has been #included and
whether that header does typedef something to boolean, let's just use
the preprocessor to hide, like some people do for X11/Xlib.h's Bool (see
qmetatype.h where we refused).
Change-Id: I05b8d7ba19004af99f3cfffd15693a87e175f05d
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
|
|
|
|
| |
Although not defined, the jpeg comment field 'content' is treated as
utf-8 nowadys. At least exiftool and exiv2 (tested via gwenview) are
expecting utf-8 here. So we should do the same.
Task-number: QTBUG-44709
Change-Id: If84dafac3e337c7993f09cd59792e721977c9adb
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ultrix and reliant have not seen a release since 1995. dgux not since
2001. bsdi not since 2003. irix not since 2006. osf not since 2010.
dynix... unclear, but no later than 2002. symbian needs no mention.
All considered obsolete, all gone.
sco and unixware are effectively obsolete. Remove them until someone
expresses a real need.
Change-Id: Ia3d9d370016adce9213ae5ad0ef965ef8de2a3ff
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
|
|
|
|
| |
Change-Id: I576187a9905802c177ae483e6c29d0f55cf7034d
|
|
|
|
|
|
|
| |
... and re-use them in QImageReader, QJpegHandler, QPngHandler.
Change-Id: Iec89e47205f3c420e1e7eb4a2d3c1fbfe887fd8c
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
|
|
Our handling of plugins when Qt is build statically is
nowadays good enough, so we don't need to build the
JPEG and GIF support directly into Qt for static builds.
Let's simply always build them as plugins.
Also simplify the logic in configure, and get rid of the
no-gif, no-jpeg and no-png config variables.
[ChangelLog][Build system] JPEG and GIF image support is now
always built as a plugin. Removed -imageformat-[jpeg|gif]
arguments to configure.
Change-Id: Ic01559ff406c966807b3be8761252e8802adcdf7
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
|