Repository navigation
Commit f062f5f
feat: surface libxml2's parse error in REQBODY_ERROR_MSG
When the XML body processor fails, REQBODY_ERROR_MSG and the debug log
only said "XML: Failed to parse document." libxml2 knows the actual
reason (tag mismatch, extra content, empty document, ...) with line and
column, and until 3.0.15 that text leaked to stderr by accident.
Read xmlCtxtGetLastError() after a failed xmlParseChunk() and build the
message from it:
XML: Failed to parse document: Opening and ending tag mismatch:
book line 1 and bookasdf (line 1, column 725)
The fixed text stays as the fallback when libxml2 has no message. The
same applies to the ARGS parsing context. xmlCtxtGetLastError() is
available and non-deprecated on every libxml2 we build against
(checked 2.9.13 and 2.15.4) and keeps working under XML_PARSE_NOERROR,
so no version conditionals are needed.
Adds a regression case that matches REQBODY_ERROR_MSG on the libxml2
text and asserts the debug log line.
Fixes #3678
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>1 parent 48e561b commit f062f5f
2 files changed
Lines changed: 114 additions & 7 deletions
File tree
- src/request_body_processor
- test/test-cases/regression
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
151 | 152 | | |
152 | 153 | | |
153 | 154 | | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
154 | 174 | | |
155 | 175 | | |
156 | 176 | | |
| |||
287 | 307 | | |
288 | 308 | | |
289 | 309 | | |
290 | | - | |
291 | | - | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
292 | 313 | | |
293 | 314 | | |
294 | 315 | | |
| |||
303 | 324 | | |
304 | 325 | | |
305 | 326 | | |
306 | | - | |
307 | | - | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
308 | 330 | | |
309 | 331 | | |
310 | 332 | | |
| |||
325 | 347 | | |
326 | 348 | | |
327 | 349 | | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
328 | 355 | | |
329 | 356 | | |
330 | 357 | | |
| |||
333 | 360 | | |
334 | 361 | | |
335 | 362 | | |
336 | | - | |
337 | | - | |
| 363 | + | |
| 364 | + | |
338 | 365 | | |
339 | 366 | | |
340 | 367 | | |
| |||
352 | 379 | | |
353 | 380 | | |
354 | 381 | | |
355 | | - | |
| 382 | + | |
| 383 | + | |
356 | 384 | | |
357 | 385 | | |
358 | 386 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
143 | 222 | | |
144 | 223 | | |
0 commit comments