pkgsrc-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[pkgsrc/trunk]: pkgsrc/graphics/babl Fix alignement related crashes
details: https://anonhg.NetBSD.org/pkgsrc/rev/1bc0e9d4c9d0
branches: trunk
changeset: 379509:1bc0e9d4c9d0
user: martin <martin%pkgsrc.org@localhost>
date: Tue May 01 20:26:38 2018 +0000
description:
Fix alignement related crashes
diffstat:
graphics/babl/Makefile | 3 +-
graphics/babl/distinfo | 3 +-
graphics/babl/patches/patch-extensions_gggl.c | 513 ++++++++++++++++++++++++++
3 files changed, 517 insertions(+), 2 deletions(-)
diffs (truncated from 541 to 300 lines):
diff -r 02c5aa07b259 -r 1bc0e9d4c9d0 graphics/babl/Makefile
--- a/graphics/babl/Makefile Tue May 01 18:35:56 2018 +0000
+++ b/graphics/babl/Makefile Tue May 01 20:26:38 2018 +0000
@@ -1,6 +1,7 @@
-# $NetBSD: Makefile,v 1.17 2018/04/29 21:28:58 ryoon Exp $
+# $NetBSD: Makefile,v 1.18 2018/05/01 20:26:38 martin Exp $
DISTNAME= babl-0.1.46
+PKGREVISION= 1
CATEGORIES= graphics
MASTER_SITES= http://download.gimp.org/pub/babl/0.1/
EXTRACT_SUFX= .tar.bz2
diff -r 02c5aa07b259 -r 1bc0e9d4c9d0 graphics/babl/distinfo
--- a/graphics/babl/distinfo Tue May 01 18:35:56 2018 +0000
+++ b/graphics/babl/distinfo Tue May 01 20:26:38 2018 +0000
@@ -1,6 +1,7 @@
-$NetBSD: distinfo,v 1.15 2018/04/29 21:28:58 ryoon Exp $
+$NetBSD: distinfo,v 1.16 2018/05/01 20:26:38 martin Exp $
SHA1 (babl-0.1.46.tar.bz2) = 33c77797bcabc1064b28f7f953db813468424147
RMD160 (babl-0.1.46.tar.bz2) = 9c6a2fe80ae5d68b40c55ef0ed38d0436edd02c0
SHA512 (babl-0.1.46.tar.bz2) = a62d78d49565cfb5c3187353f31d7793156ae318e2a29b7430ca08272ea98b9101afb602d73c5cc87bc9f20a4469bc08bf8c6c197529260ae0e41d183f300648
Size (babl-0.1.46.tar.bz2) = 653887 bytes
+SHA1 (patch-extensions_gggl.c) = 308fa13ab4dfc3f259f1c220d9619d24e8459716
diff -r 02c5aa07b259 -r 1bc0e9d4c9d0 graphics/babl/patches/patch-extensions_gggl.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphics/babl/patches/patch-extensions_gggl.c Tue May 01 20:26:38 2018 +0000
@@ -0,0 +1,513 @@
+$NetBSD: patch-extensions_gggl.c,v 1.1 2018/05/01 20:26:38 martin Exp $
+
+Patch also submitted upstream:
+ https://bugzilla.gnome.org/show_bug.cgi?id=795726
+
+Fixes crashes on alignment critical architectures.
+
+--- extensions/gggl.c.orig 2018-04-07 16:38:23.000000000 +0200
++++ extensions/gggl.c 2018-05-01 22:09:47.319795395 +0200
+@@ -56,12 +56,15 @@ conv_F_8 (const Babl *conversion,unsigne
+
+ while (n--)
+ {
+- float f = ((*(float *) src));
+- int uval = lrint (f * 255.0);
++ float f;
++ int uval;
++
++ memcpy(&f, src, sizeof(f));
++ uval = lrint (f * 255.0);
+
+ if (uval < 0) uval = 0;
+ if (uval > 255) uval = 255;
+- *(unsigned char *) dst = uval;
++ *dst = uval;
+
+ dst += 1;
+ src += 4;
+@@ -72,21 +75,26 @@ static void
+ conv_F_16 (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
+ {
+ long n = samples;
++ unsigned short v;
+
+ while (n--)
+ {
+- float f = ((*(float *) src));
++ float f;
++ memcpy(&f, src, sizeof(f));
+ if (f < 0.0)
+ {
+- *(unsigned short *) dst = 0;
++ v = 0;
++ memcpy(dst, &v, sizeof(v));
+ }
+ else if (f > 1.0)
+ {
+- *(unsigned short *) dst = 65535;
++ v = 65535;
++ memcpy(dst, &v, sizeof(v));
+ }
+ else
+ {
+- *(unsigned short *) dst = lrint (f * 65535.0);
++ v = lrint (f * 65535.0);
++ memcpy(dst, &v, sizeof(v));
+ }
+ dst += 2;
+ src += 4;
+@@ -100,7 +108,9 @@ conv_8_F (const Babl *conversion,unsigne
+
+ while (n--)
+ {
+- (*(float *) dst) = ((*(unsigned char *) src) / 255.0);
++ float v;
++ v = *src / 255.0;
++ memcpy(dst, &v, sizeof(v));
+ dst += 4;
+ src += 1;
+ }
+@@ -113,7 +123,8 @@ conv_16_F (const Babl *conversion,unsign
+
+ while (n--)
+ {
+- (*(float *) dst) = *(unsigned short *) src / 65535.0;
++ float v = *src / 65535.0;
++ memcpy(dst, &v, sizeof(v));
+ dst += 4;
+ src += 2;
+ }
+@@ -130,13 +141,18 @@ conv_rgbaF_rgb8 (const Babl *conversion,
+
+ for (c = 0; c < 3; c++)
+ {
+- int val = rint ((*(float *) src) * 255.0);
++ float v;
++ int val;
++
++ memcpy(&v, src, sizeof(v));
++ val = rint (v * 255.0);
++
+ if (val < 0)
+- *(unsigned char *) dst = 0;
++ *dst = 0;
+ else if (val > 255)
+- *(unsigned char *) dst = 255;
++ *dst = 255;
+ else
+- *(unsigned char *) dst = val;
++ *dst = val;
+ dst += 1;
+ src += 4;
+ }
+@@ -151,7 +167,11 @@ conv_F_D (const Babl *conversion,unsigne
+
+ while (n--)
+ {
+- *(double *) dst = ((*(float *) src));
++ float sv;
++ double dv;
++ memcpy(&sv, src, sizeof(sv));
++ dv = (float)sv;
++ memcpy(dst, &dv, sizeof(dv));
+ dst += 8;
+ src += 4;
+ }
+@@ -164,7 +184,11 @@ conv_D_F (const Babl *conversion,unsigne
+
+ while (n--)
+ {
+- *(float *) dst = ((*(double *) src));
++ float dv;
++ double sv;
++ memcpy(&sv, src, sizeof(sv));
++ dv = sv;
++ memcpy(dst, &dv, sizeof(dv));
+ dst += 4;
+ src += 8;
+ }
+@@ -178,7 +202,9 @@ conv_16_8 (const Babl *conversion,unsign
+ while (n--)
+ {
+ #define div_257(a) ((((a)+128)-(((a)+128)>>8))>>8)
+- (*(unsigned char *) dst) = div_257 (*(unsigned short *) src);
++ unsigned short sv;
++ memcpy(&sv, src, sizeof(sv));
++ *dst = div_257 (sv);
+ dst += 1;
+ src += 2;
+ }
+@@ -191,7 +217,8 @@ conv_8_16 (const Babl *conversion,unsign
+
+ while (n--)
+ {
+- (*(unsigned short *) dst) = ((*(unsigned char *) src) << 8) | *src;
++ unsigned short dv = (*src << 8) | *src;
++ memcpy(dst, &dv, sizeof(dv));
+ dst += 2;
+ src += 1;
+ }
+@@ -353,12 +380,14 @@ conv_gaF_gAF (const Babl *conversion,uns
+
+ while (n--)
+ {
+- float alpha = (*(float *) (src + 4));
+-
+- *(float *) dst = ((*(float *) src) * alpha);
++ float alpha, sv;
++ memcpy(&alpha, src + 4, sizeof(alpha));
++ memcpy(&sv, src, sizeof(sv));
++ sv *= alpha;
++ memcpy(dst, &sv, sizeof(sv));
+ dst += 4;
+ src += 4;
+- *(float *) dst = alpha;
++ memcpy(dst, &alpha, sizeof(alpha));
+ dst += 4;
+ src += 4;
+ }
+@@ -371,15 +400,19 @@ conv_gAF_gaF (const Babl *conversion,uns
+
+ while (n--)
+ {
+- float alpha = (*(float *) (src + 4));
++ float alpha, sv, dv;
++ memcpy(&alpha, src+4, sizeof(alpha));
+
+ if (alpha == 0.0f)
+- *(float *) dst = 0.0f;
+- else
+- *(float *) dst = ((*(float *) src) / alpha);
++ dv = 0.0f;
++ else {
++ memcpy(&sv, src, sizeof(sv));
++ dv = sv / alpha;
++ }
++ memcpy(dst, &dv, sizeof(dv));
+ dst += 4;
+ src += 4;
+- *(float *) dst = alpha;
++ memcpy(dst, &alpha, sizeof(alpha));
+ dst += 4;
+ src += 4;
+ }
+@@ -394,16 +427,9 @@ conv_rgbaF_rgbF (const Babl *conversion,
+
+ while (n--)
+ {
+- *(uint32_t *) dst = (*(uint32_t *) src);
+- dst += 4;
+- src += 4;
+- *(uint32_t *) dst = (*(uint32_t *) src);
+- dst += 4;
+- src += 4;
+- *(uint32_t *) dst = (*(uint32_t *) src);
+- dst += 4;
+- src += 4;
+- src += 4;
++ memcpy(dst, src, 4*3);
++ dst += 4*3;
++ src += 4*4;
+ }
+ }
+
+@@ -411,15 +437,12 @@ static void
+ conv_rgbF_rgbaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
+ {
+ long n = samples;
+- float *fsrc = (void*) src;
+- float *fdst = (void*) dst;
++ float one = 1.0f;
+
+ while (n--)
+ {
+- *fdst++ = *fsrc++;
+- *fdst++ = *fsrc++;
+- *fdst++ = *fsrc++;
+- *fdst++ = 1.0f;
++ memcpy(dst, src, sizeof(float)*3);
++ memcpy(dst, &one, sizeof(one));
+ }
+ }
+
+@@ -433,7 +456,7 @@ conv_gaF_gF (const Babl *conversion,unsi
+
+ while (n--)
+ {
+- *(int *) dst = (*(int *) src);
++ memcpy(dst, src, 4);
+ dst += 4;
+ src += 4;
+ src += 4;
+@@ -444,13 +467,14 @@ static void
+ conv_gF_gaF (const Babl *conversion,unsigned char *src, unsigned char *dst, long samples)
+ {
+ long n = samples;
++ float one = 1.0f;
+
+ while (n--)
+ {
+- *(float *) dst = (*(float *) src);
++ memcpy(dst, src, sizeof(float));
+ dst += 4;
+ src += 4;
+- *(float *) dst = 1.0;
++ memcpy(dst, &one, sizeof(one));
+ dst += 4;
+ }
+ }
+@@ -472,7 +496,7 @@ conv_gF_rgbF (const Babl *conversion,uns
+
+ for (c = 0; c < 3; c++)
+ {
+- (*(float *) dst) = (*(float *) src);
++ memcpy(dst, src, 4);
+ dst += 4;
+ }
+ src += 4;
+@@ -521,11 +545,11 @@ conv_gaF_rgbaF (const Babl *conversion,u
+
+ for (c = 0; c < 3; c++)
+ {
Home |
Main Index |
Thread Index |
Old Index