Commit b3affbf
Address review of the Sprintf fix and harden the differential probe
Three defects found reviewing the previous commit against its own intent.
The Sprintf rewriter passed a '%' that starts no directive straight through.
The point of the change was that Sprintf should stop producing functions that
fail when called, but a lone '%' is itself an error to format(), so
fmt.Sprintf("100%") still raised "unterminated format() type specifier" at run
time. It is now escaped to %% and reaches the caller as a literal percent.
The documentation understated what dropping a verb costs. Saying only that
flags and precision are dropped implies the difference is padding, but the
verbs that change an operand's representation are affected too: %x, %o, %b, %e
and %q all render what %s renders, so fmt.Sprintf("%x", 255) yields 255 rather
than ff. That is a wrong value rather than a wrong width, which is worse than
an error because it is silent, so both doc/plxgo.md and doc/LIMITATIONS.md now
say so and point at an explicit conversion.
The differential probe returned values verbatim on one output line per probe.
A value containing a newline, or a blank value dropped by the runner's filter,
would shift every later result onto the wrong probe. Counts usually catch that,
but a two-line value and a blank value in the same run cancel out and the
mis-mapping is silent. The probe now returns a sentinel for the empty string
and escapes newlines, so one probe is always exactly one line, and the runner
no longer discards blank lines.
Regression cases added for the bare percent, a percent followed by punctuation,
and the representation-changing verbs.
Verified on PostgreSQL 18.4: clean build with no warnings, 13/13 installcheck,
differentialcheck clean at 374 matching and 14 documented, and the check still
exits 1 on an injected defect after the probe change.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>1 parent 1faeebf commit b3affbf
6 files changed
Lines changed: 74 additions & 8 deletions
File tree
- doc
- src
- test
- expected
- sql
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
117 | 117 | | |
118 | 118 | | |
119 | 119 | | |
120 | | - | |
121 | | - | |
122 | | - | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
123 | 128 | | |
124 | 129 | | |
125 | 130 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
147 | 147 | | |
148 | 148 | | |
149 | 149 | | |
150 | | - | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
151 | 155 | | |
152 | 156 | | |
153 | 157 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
416 | 416 | | |
417 | 417 | | |
418 | 418 | | |
419 | | - | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
420 | 422 | | |
421 | 423 | | |
422 | 424 | | |
| |||
470 | 472 | | |
471 | 473 | | |
472 | 474 | | |
473 | | - | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
474 | 478 | | |
475 | 479 | | |
476 | 480 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
49 | 49 | | |
50 | 50 | | |
51 | 51 | | |
52 | | - | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
53 | 58 | | |
54 | 59 | | |
55 | 60 | | |
| |||
96 | 101 | | |
97 | 102 | | |
98 | 103 | | |
99 | | - | |
| 104 | + | |
100 | 105 | | |
101 | 106 | | |
102 | 107 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
303 | 303 | | |
304 | 304 | | |
305 | 305 | | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
212 | 212 | | |
213 | 213 | | |
214 | 214 | | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
0 commit comments