diff options
Diffstat (limited to 'src/microhttpd/postprocessor.c')
-rw-r--r-- | src/microhttpd/postprocessor.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/microhttpd/postprocessor.c b/src/microhttpd/postprocessor.c index abe7b437..076de337 100644 --- a/src/microhttpd/postprocessor.c +++ b/src/microhttpd/postprocessor.c | |||
@@ -360,9 +360,10 @@ process_value (struct MHD_PostProcessor *pp, | |||
360 | mhd_assert ( (NULL != value_start) || (NULL == value_end) ); | 360 | mhd_assert ( (NULL != value_start) || (NULL == value_end) ); |
361 | mhd_assert ( (NULL == last_escape) || (NULL != value_start) ); | 361 | mhd_assert ( (NULL == last_escape) || (NULL != value_start) ); |
362 | /* move remaining input from previous round into processing buffer */ | 362 | /* move remaining input from previous round into processing buffer */ |
363 | memcpy (xbuf, | 363 | if (0 != pp->xbuf_pos) |
364 | pp->xbuf, | 364 | memcpy (xbuf, |
365 | pp->xbuf_pos); | 365 | pp->xbuf, |
366 | pp->xbuf_pos); | ||
366 | xoff = pp->xbuf_pos; | 367 | xoff = pp->xbuf_pos; |
367 | pp->xbuf_pos = 0; | 368 | pp->xbuf_pos = 0; |
368 | if ( (NULL != last_escape) && | 369 | if ( (NULL != last_escape) && |
@@ -460,10 +461,13 @@ process_value (struct MHD_PostProcessor *pp, | |||
460 | pp->value_offset += xoff; | 461 | pp->value_offset += xoff; |
461 | if (cut) | 462 | if (cut) |
462 | break; | 463 | break; |
463 | xbuf[delta] = '%'; /* undo 0-termination */ | 464 | if (0 != clen) |
464 | memmove (xbuf, | 465 | { |
465 | &xbuf[delta], | 466 | xbuf[delta] = '%'; /* undo 0-termination */ |
466 | clen); | 467 | memmove (xbuf, |
468 | &xbuf[delta], | ||
469 | clen); | ||
470 | } | ||
467 | xoff = clen; | 471 | xoff = clen; |
468 | } | 472 | } |
469 | } | 473 | } |