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++;
--
⑨