Thomas Munro <thomas.mu...@enterprisedb.com> writes: > PrintfArgType is an enum, and we define NL_ARGMAX as 16 if the OS > didn't already define it. On FreeBSD 11, NL_ARGMAX was defined as 99 > in <limits.h>. On FreeBSD 12, it is defined as 65536... ouch. On a > Debian box I see it is 4096.
Some further research: * My Red Hat boxes also think it's 4096. * macOS thinks it's just 9. * Assuming I've grepped the .po files correctly, we have no translatable messages today that use more than 9 %'s. That's not a totally accurate result because I didn't try to count "*" precision/width specs, which'd also count against ARGMAX. Still, we couldn't be needing much more than 9 slots. * It's completely silly to imagine that anybody would write a printf call with more than, perhaps, a couple dozen arguments. So these OS values must be getting set with an eye to some other use-case for NL_ARGMAX besides printf field order control. Setting snprintf's limit to 16 might be a bit tight based on the observed results for translatable messages, but I'd be entirely comfortable with 32. The values we're getting from the OS are just silly. regards, tom lane