Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
ImageMagick.29424
ImageMagick-CVE-2020-27767,27768,27751,27752,27...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ImageMagick-CVE-2020-27767,27768,27751,27752,27757.patch of Package ImageMagick.29424
Index: ImageMagick-6.8.8-1/magick/quantum.h =================================================================== --- ImageMagick-6.8.8-1.orig/magick/quantum.h 2013-11-27 20:02:59.000000000 +0100 +++ ImageMagick-6.8.8-1/magick/quantum.h 2021-02-15 13:27:57.153365505 +0100 @@ -18,6 +18,7 @@ #ifndef _MAGICKCORE_QUANTUM_H #define _MAGICKCORE_QUANTUM_H +#include <float.h> #include "magick/image.h" #include "magick/semaphore.h" @@ -26,6 +27,7 @@ extern "C" { #endif #define RoundToQuantum(quantum) ClampToQuantum(quantum) +#define IsNaN(a) ((a) != (a) ? MagickTrue : MagickFalse) typedef enum { @@ -84,16 +86,16 @@ typedef enum typedef struct _QuantumInfo QuantumInfo; -static inline Quantum ClampToQuantum(const MagickRealType value) +static inline Quantum ClampToQuantum(const MagickRealType quantum) { #if defined(MAGICKCORE_HDRI_SUPPORT) - return((Quantum) value); + return((Quantum) quantum); #else - if (value <= 0.0f) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return((Quantum) 0); - if (value >= (MagickRealType) QuantumRange) + if (quantum >= (MagickRealType) QuantumRange) return(QuantumRange); - return((Quantum) (value+0.5f)); + return((Quantum) (quantum+0.5)); #endif } @@ -103,7 +105,7 @@ static inline unsigned char ScaleQuantum #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned char) quantum); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if (quantum >= 255.0) return(255); @@ -116,7 +118,7 @@ static inline unsigned char ScaleQuantum #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned char) (((quantum+128UL)-((quantum+128UL) >> 8)) >> 8)); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if ((quantum/257.0) >= 255.0) return(255); @@ -130,7 +132,7 @@ static inline unsigned char ScaleQuantum return((unsigned char) ((quantum+MagickULLConstant(8421504))/ MagickULLConstant(16843009))); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if ((quantum/16843009.0) >= 255.0) return(255); @@ -143,7 +145,7 @@ static inline unsigned char ScaleQuantum #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned char) (quantum/72340172838076673.0+0.5)); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if ((quantum/72340172838076673.0) >= 255.0) return(255); Index: ImageMagick-6.8.8-1/magick/quantum-import.c =================================================================== --- ImageMagick-6.8.8-1.orig/magick/quantum-import.c 2021-02-15 13:19:07.446217812 +0100 +++ ImageMagick-6.8.8-1/magick/quantum-import.c 2021-02-15 13:19:10.934238539 +0100 @@ -139,20 +139,18 @@ static inline const unsigned char *PushD quantum[5]=(*pixels++); quantum[6]=(*pixels++); quantum[7]=(*pixels++); - p=(double *) quantum; - *pixel=(*p); - *pixel-=quantum_info->minimum; - *pixel*=quantum_info->scale; - return(pixels); } - quantum[7]=(*pixels++); - quantum[6]=(*pixels++); - quantum[5]=(*pixels++); - quantum[5]=(*pixels++); - quantum[3]=(*pixels++); - quantum[2]=(*pixels++); - quantum[1]=(*pixels++); - quantum[0]=(*pixels++); + else + { + quantum[7]=(*pixels++); + quantum[6]=(*pixels++); + quantum[5]=(*pixels++); + quantum[5]=(*pixels++); + quantum[3]=(*pixels++); + quantum[2]=(*pixels++); + quantum[1]=(*pixels++); + quantum[0]=(*pixels++); + } p=(double *) quantum; *pixel=(*p); *pixel-=quantum_info->minimum; @@ -176,20 +174,23 @@ static inline const unsigned char *PushF quantum[1]=(*pixels++); quantum[2]=(*pixels++); quantum[3]=(*pixels++); - p=(float *) quantum; - *pixel=(*p); - *pixel-=quantum_info->minimum; - *pixel*=quantum_info->scale; - return(pixels); - } - quantum[3]=(*pixels++); - quantum[2]=(*pixels++); - quantum[1]=(*pixels++); - quantum[0]=(*pixels++); + } + else + { + quantum[3]=(*pixels++); + quantum[2]=(*pixels++); + quantum[1]=(*pixels++); + quantum[0]=(*pixels++); + } p=(float *) quantum; *pixel=(*p); *pixel-=quantum_info->minimum; *pixel*=quantum_info->scale; + if (*pixel < FLT_MIN) + *pixel=FLT_MIN; + else + if (*pixel > FLT_MAX) + *pixel=FLT_MAX; return(pixels); } Index: ImageMagick-6.8.8-1/magick/quantum-private.h =================================================================== --- ImageMagick-6.8.8-1.orig/magick/quantum-private.h 2013-11-27 20:02:59.000000000 +0100 +++ ImageMagick-6.8.8-1/magick/quantum-private.h 2021-02-15 13:19:10.934238539 +0100 @@ -19,6 +19,7 @@ #define _MAGICKCORE_QUANTUM_PRIVATE_H #include "magick/cache.h" +#include "magick/image-private.h" #if defined(__cplusplus) || defined(c_plusplus) extern "C" { @@ -268,20 +269,42 @@ static inline const unsigned char *PushS return(pixels); } +static inline double PerceptibleReciprocal(const double x) +{ + double + sign; + + /* + Return 1/x where x is perceptible (not unlimited or infinitesimal). + */ + sign=x < 0.0 ? -1.0 : 1.0; + if ((sign*x) >= MagickEpsilon) + return(1.0/x); + return(sign/MagickEpsilon); +} + static inline Quantum ScaleAnyToQuantum(const QuantumAny quantum, const QuantumAny range) { #if !defined(MAGICKCORE_HDRI_SUPPORT) - return((Quantum) (((MagickRealType) QuantumRange*quantum)/range+0.5)); + return((Quantum) ((double) QuantumRange*(quantum*PerceptibleReciprocal((double) range))+0.5)); #else - return((Quantum) (((MagickRealType) QuantumRange*quantum)/range)); + return((Quantum) ((double) QuantumRange*(quantum*PerceptibleReciprocal((double) range)))); #endif } static inline QuantumAny ScaleQuantumToAny(const Quantum quantum, const QuantumAny range) { - return((QuantumAny) (((MagickRealType) range*quantum)/QuantumRange+0.5)); +#if !defined(MAGICKCORE_HDRI_SUPPORT) + return((QuantumAny) ((double) range*quantum/QuantumRange)); +#else + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) + return((QuantumAny) 0UL); + if (((double) range*quantum/QuantumRange) >= 18446744073709551615.0) + return((QuantumAny) MagickULLConstant(18446744073709551615)); + return((QuantumAny) ((double) range*quantum/QuantumRange+0.5)); +#endif } #if (MAGICKCORE_QUANTUM_DEPTH == 8) @@ -317,8 +340,8 @@ static inline unsigned int ScaleQuantumT #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned int) (16843009UL*quantum)); #else - if (quantum <= 0.0) - return(0UL); + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) + return(0U); if ((16843009.0*quantum) >= 4294967295.0) return(4294967295UL); return((unsigned int) (16843009.0*quantum+0.5)); @@ -332,8 +355,8 @@ static inline unsigned int ScaleQuantumT #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned int) quantum); #else - if (quantum < 0.0) - return(0UL); + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) + return(0U); return((unsigned int) (quantum+0.5)); #endif } @@ -343,7 +366,7 @@ static inline unsigned short ScaleQuantu #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned short) (257UL*quantum)); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if ((257.0*quantum) >= 65535.0) return(65535); @@ -397,7 +420,7 @@ static inline unsigned int ScaleQuantumT #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned int) (65537UL*quantum)); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0UL); if ((65537.0*quantum) >= 4294967295.0) return(4294967295U); @@ -412,8 +435,8 @@ static inline unsigned int ScaleQuantumT #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned int) quantum); #else - if (quantum < 0.0) - return(0UL); + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) + return(0U); return((unsigned int) (quantum+0.5)); #endif } @@ -423,7 +446,7 @@ static inline unsigned short ScaleQuantu #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned short) quantum); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if (quantum >= 65535.0) return(65535); @@ -474,14 +497,14 @@ static inline unsigned int ScaleQuantumT static inline unsigned int ScaleQuantumToMap(const Quantum quantum) { - if (quantum < 0.0) - return(0UL); if ((quantum/65537) >= (Quantum) MaxMap) return((unsigned int) MaxMap); #if !defined(MAGICKCORE_HDRI_SUPPORT) return((unsigned int) ((quantum+MagickULLConstant(32768))/ MagickULLConstant(65537))); #else + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) + return(0U); return((unsigned int) (quantum/65537.0+0.5)); #endif } @@ -492,7 +515,7 @@ static inline unsigned short ScaleQuantu return((unsigned short) ((quantum+MagickULLConstant(32768))/ MagickULLConstant(65537))); #else - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if ((quantum/65537.0) >= 65535.0) return(65535); @@ -535,8 +558,8 @@ static inline unsigned int ScaleQuantumT static inline unsigned int ScaleQuantumToMap(const Quantum quantum) { - if (quantum <= 0.0) - return(0UL); + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) + return(0U); if ((quantum/281479271743489.0) >= MaxMap) return((unsigned int) MaxMap); return((unsigned int) (quantum/281479271743489.0+0.5)); @@ -544,7 +567,7 @@ static inline unsigned int ScaleQuantumT static inline unsigned short ScaleQuantumToShort(const Quantum quantum) { - if (quantum <= 0.0) + if ((IsNaN(quantum) != 0) || (quantum <= 0.0)) return(0); if ((quantum/281479271743489.0) >= 65535.0) return(65535); Index: ImageMagick-6.8.8-1/magick/pixel-private.h =================================================================== --- ImageMagick-6.8.8-1.orig/magick/pixel-private.h 2013-11-27 20:02:59.000000000 +0100 +++ ImageMagick-6.8.8-1/magick/pixel-private.h 2021-02-15 13:19:10.934238539 +0100 @@ -75,20 +75,6 @@ static inline MagickBooleanType IsMonoch return(MagickFalse); } -static inline double PerceptibleReciprocal(const double x) -{ - double - sign; - - /* - Return 1/x where x is perceptible (not unlimited or infinitesimal). - */ - sign=x < 0.0 ? -1.0 : 1.0; - if ((sign*x) >= MagickEpsilon) - return(1.0/x); - return(sign/MagickEpsilon); -} - static inline void SetMagickPixelPacket(const Image *image, const PixelPacket *color,const IndexPacket *index,MagickPixelPacket *pixel) {
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor