git: 9front

Download patch

ref: a12630e8392a4aa7304a416e1314a5dd974bd16e
parent: fb1b126b31fb8aba59caaf00fa74cff377dae3be
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Jan 12 05:34:43 EST 2026

jpg: fix CLAMP() argument (must not contain side effects)

--- a/sys/src/cmd/jpg/readjpg.c
+++ b/sys/src/cmd/jpg/readjpg.c
@@ -1273,8 +1273,8 @@
 	k = 0;
 	for(y=0; y<dy; y++){
 		for(x=0; x<dx; x++){
-			r = CLAMP(data[k+x] + 128);
-			pic[pici+x] = r;
+			r = data[k+x] + 128;
+			pic[pici+x] = CLAMP(r);
 		}
 		pici += h->X;
 		k += 8;
@@ -1315,9 +1315,12 @@
 		bp = bpic+pici;
 		if(colorspace == CYCbCr)
 			for(x=0; x<dx; x++){
-				*rp++ = CLAMP(*p0++ + 128);
-				*gp++ = CLAMP(*p1++ + 128);
-				*bp++ = CLAMP(*p2++ + 128);
+				r = *p0++ + 128;
+				g = *p1++ + 128;
+				b = *p2++ + 128;
+				*rp++ = CLAMP(r);
+				*gp++ = CLAMP(g);
+				*bp++ = CLAMP(b);
 			}
 		else
 			for(x=0; x<dx; x++){
@@ -1324,12 +1327,12 @@
 				Y = (*p0++ + 128) << 11;
 				Cb = *p1++;
 				Cr = *p2++;
-				r = Y+c1*Cr;
-				g = Y-c2*Cb-c3*Cr;
-				b = Y+c4*Cb;
-				*rp++ = CLAMP(r >> 11);
-				*gp++ = CLAMP(g >> 11);
-				*bp++ = CLAMP(b >> 11);
+				r = (Y+c1*Cr) >> 11;
+				g = (Y-c2*Cb-c3*Cr) >> 11;
+				b = (Y+c4*Cb) >> 11;
+				*rp++ = CLAMP(r);
+				*gp++ = CLAMP(g);
+				*bp++ = CLAMP(b);
 			}
 		pici += h->X;
 		k += 8;
@@ -1379,20 +1382,20 @@
 		x2 = 0;
 		for(x=0; x<dx; x++){
 			if(colorspace == CYCbCr){
-				rpic[pici+x] = CLAMP(data0[b0][y0+x0++*H0/Hmax] + 128);
-				gpic[pici+x] = CLAMP(data1[b1][y1+x1++*H1/Hmax] + 128);
-				bpic[pici+x] = CLAMP(data2[b2][y2+x2++*H2/Hmax] + 128);
+				r = data0[b0][y0+x0++*H0/Hmax] + 128;
+				g = data1[b1][y1+x1++*H1/Hmax] + 128;
+				b = data2[b2][y2+x2++*H2/Hmax] + 128;
 			}else{
 				Y = (data0[b0][y0+x0++*H0/Hmax]+128)<<11;
 				Cb = data1[b1][y1+x1++*H1/Hmax];
 				Cr = data2[b2][y2+x2++*H2/Hmax];
-				r = Y+c1*Cr;
-				g = Y-c2*Cb-c3*Cr;
-				b = Y+c4*Cb;
-				rpic[pici+x] = CLAMP(r >> 11);
-				gpic[pici+x] = CLAMP(g >> 11);
-				bpic[pici+x] = CLAMP(b >> 11);
+				r = (Y+c1*Cr) >> 11;
+				g = (Y-c2*Cb-c3*Cr) >> 11;
+				b = (Y+c4*Cb) >> 11;
 			}
+			rpic[pici+x] = CLAMP(r);
+			gpic[pici+x] = CLAMP(g);
+			bpic[pici+x] = CLAMP(b);
 			if(x0*H0/Hmax >= 8){
 				x0 = 0;
 				b0++;
--