cgen: generate 123u instead of 123 (for std/jpeg)
Updates https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=59018
diff --git a/internal/cgen/expr.go b/internal/cgen/expr.go
index c4a439f..62115a7 100644
--- a/internal/cgen/expr.go
+++ b/internal/cgen/expr.go
@@ -31,8 +31,23 @@
if cv := n.ConstValue(); cv != nil {
if typ := n.MType(); typ.IsNumTypeOrIdeal() {
b.writes(cv.String())
- if cv.Cmp(maxInt64) > 0 {
+ if cv.Sign() < 0 {
+ // No-op.
+ } else if cv.Cmp(maxInt64) > 0 {
b.writeb('u')
+ } else {
+ // Appending a 'u' is currently targeted to only those
+ // constants used by std/jpeg/decode_idct_default.wuffs
+ //
+ // TODO: don't be so shy about it. It's narrow for now, to make
+ // only the smallest generated-code change that fixes
+ // https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=59018
+ // but we should generate 123u instead of 123 more broadly.
+ const minIncl = 0xFFFFADFD
+ const maxIncl = 0xFFFFF384
+ if i := cv.Int64(); (minIncl <= i) && (i <= maxIncl) {
+ b.writeb('u')
+ }
}
} else if typ.IsNullptr() {
b.writes("NULL")
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 0b4f507..0ae1d93 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -36507,10 +36507,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36551,10 +36551,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36595,10 +36595,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36639,10 +36639,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36683,10 +36683,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36727,10 +36727,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36771,10 +36771,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36815,10 +36815,10 @@
v_ck3 = ((uint32_t)(v_bq3 * 25172));
v_ck5 = ((uint32_t)(v_bq5 * 16819));
v_ck7 = ((uint32_t)(v_bq7 * 2446));
- v_ci51 *= 4294964100;
- v_ci53 *= 4294946301;
- v_ci71 *= 4294959923;
- v_ci73 *= 4294951227;
+ v_ci51 *= 4294964100u;
+ v_ci53 *= 4294946301u;
+ v_ci71 *= 4294959923u;
+ v_ci73 *= 4294951227u;
v_cl51 = ((uint32_t)(v_ci51 + v_cj));
v_cl73 = ((uint32_t)(v_ci73 + v_cj));
v_ck1 += ((uint32_t)(v_ci71 + v_cl51));
@@ -36859,10 +36859,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -36907,10 +36907,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -36955,10 +36955,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -37003,10 +37003,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -37051,10 +37051,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -37099,10 +37099,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -37147,10 +37147,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));
@@ -37195,10 +37195,10 @@
v_rk3 = ((uint32_t)(v_in3 * 25172));
v_rk5 = ((uint32_t)(v_in5 * 16819));
v_rk7 = ((uint32_t)(v_in7 * 2446));
- v_ri51 *= 4294964100;
- v_ri53 *= 4294946301;
- v_ri71 *= 4294959923;
- v_ri73 *= 4294951227;
+ v_ri51 *= 4294964100u;
+ v_ri53 *= 4294946301u;
+ v_ri71 *= 4294959923u;
+ v_ri73 *= 4294951227u;
v_rl51 = ((uint32_t)(v_ri51 + v_rj));
v_rl73 = ((uint32_t)(v_ri73 + v_rj));
v_rk1 += ((uint32_t)(v_ri71 + v_rl51));