Sorry to complain once again.The attached testcase should decode valid
UTF8.Best wishes


-------- Weitergeleitete Nachricht --------Von: Christian Grothoff <
groth...@gnunet.org>Antwort an: libmicrohttpd development and user
mailinglist <libmicrohttpd@gnu.org>An: libmicrohttpd@gnu.orgBetreff:
Re: [libmicrohttpd] libmicrohttpd 0.9.71 releasedDatum: Fri, 10 Jul
2020 15:08:47 +0200
Fixed in 8c773704..9b39de8d. Thanks for reporting! -Christian
On 7/6/20 7:15 PM, Markus Doppelbauer wrote:
> There is a second issue parsing url-encoded post requests.I have
> attached a testcase (same ugly code as last time)."text" should be
> "text, text" not "text%2C text".
> Best wishes
>
> -------- Weitergeleitete Nachricht --------*Von*: Christian Grothoff
> <groth...@gnunet.org
> <mailto:christian%20grothoff%20%3cgroth...@gnunet.org%3e>>*Antwort
> an*: libmicrohttpd development and user mailinglist<
> libmicrohttpd@gnu.org
> <mailto:
> libmicrohttpd%20development%20and%20user%20mailinglist%20%3clibmicroht...@gnu.org
> %3e>>*An*: libmicrohttpd <libmicrohttpd@gnu.org
> <mailto:libmicrohttpd%20%3clibmicroht...@gnu.org%3e>>*Betreff*:
> [libmicrohttpd] libmicrohttpd 0.9.71 released*Datum*: Sun, 28 Jun
> 2020 22:04:49 +0200
> Dear all,
>
> I'm happy to announce the release of GNU libmicrohttpd 0.9.71.
>
> This release fixes a potential buffer overflow and is thus considered
> a
> security release. Please upgrade as soon as possible.  Thanks to
> Nicolas
> Mora for finding and reporting the issue.
>
> Additionally, the release fixes the following issues:
>
> * Proper uncorking with GnuTLS to ensure 'last bytes' are
>   transmitted over TLS connections even if we are congested
> * Fixes wrong values returned by PostProcessor given certain
>   parser boundaries
> * Improved documentation, fixed spelling mistakes
> * Fixed several socket handling issues on OS X
>
> Furthermore, the release introduces an 'enum MHD_Result' instead of
> #defines for MHD_YES/MHD_NO. This is intended to make it easier to
> check
> for certain API misuse bugs by providing better types (not everything
> is
> an 'int').  While this does NOT change the binary API, this change
> _will_ cause compiler warnings for all legacy code -- until 'int' is
> replaced with 'enum MHD_Result'.
>
> If you want your code to build without warnings on both older and
> newer
> MHD releases, you may want to introduce a MHD_RESULT as done here:
>
> https://git.gnunet.org/gnunet.git/tree/src/include/gnunet_mhd_compat.h
>
>
>
> That said, this being a security release it may be a good time to not
> build nicely against older versions.
>
>
> Happy hacking!
>
> Christian
>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <microhttpd.h>

enum PP_State
{
  /* general states */
  PP_Error,
  PP_Done,
  PP_Init,
  PP_NextBoundary,

  /* url encoding-states */
  PP_ProcessValue,
  PP_Callback,
  PP_ExpectNewLine,

  /* post encoding-states  */
  PP_ProcessEntryHeaders,
  PP_PerformCheckMultipart,
  PP_ProcessValueToBoundary,
  PP_PerformCleanup,

  /* nested post-encoding states */
  PP_Nested_Init,
  PP_Nested_PerformMarking,
  PP_Nested_ProcessEntryHeaders,
  PP_Nested_ProcessValueToBoundary,
  PP_Nested_PerformCleanup

};
enum RN_State
{
  RN_Inactive = 0,
  RN_OptN = 1,
  RN_Full = 2,
  RN_Dash = 3,
  RN_Dash2 = 4
};
enum NE_State
{
  NE_none = 0,
  NE_content_name = 1,
  NE_content_type = 2,
  NE_content_filename = 4,
  NE_content_transfer_encoding = 8
};
struct MHD_PostProcessor
{
  struct MHD_Connection *connection;
  MHD_PostDataIterator ikvi;
  void *cls;
  const char *encoding;
  const char *boundary;
  char *nested_boundary;
  char *content_name;
  char *content_type;
  char *content_filename;
  char *content_transfer_encoding;
  char xbuf[2];
  size_t buffer_size;
  size_t buffer_pos;
  size_t xbuf_pos;
  uint64_t value_offset;
  size_t blen;
  size_t nlen;
  bool must_ikvi;
  bool must_unescape_key;
  enum PP_State state;
  enum RN_State skip_rn;
  enum PP_State dash_state;
  enum NE_State have;
};
static MHD_Result post_data_iterator( void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type,
                               const char *transfer_encoding, const char *data, uint64_t off, size_t size )
{
    printf("%s\n", data );
    return MHD_YES;
}
int main( int argc, char *argv[] )
{
    struct MHD_PostProcessor *postprocessor = (struct MHD_PostProcessor *)calloc(1, sizeof(struct MHD_PostProcessor) + 0x1000+1);
    postprocessor->connection = nullptr;
    postprocessor->ikvi = post_data_iterator;
    postprocessor->cls = nullptr;
    postprocessor->encoding = MHD_HTTP_POST_ENCODING_FORM_URLENCODED;
    postprocessor->buffer_size = 0x1000;
    postprocessor->state = PP_Init;
    postprocessor->blen = 0;
    postprocessor->boundary = nullptr;
    postprocessor->skip_rn = RN_Inactive;
    const char *chunk = "t=x%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%28%E2%80%9Cxxxxxxxxxxxxx%E2%80%9D%29xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxx%26xxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxx%3A%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0A%E2%80%A2xxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%3A%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0A%E2%80%A2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%28xxxx%29%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%28xxx%29%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%3A%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%27xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0A%E2%80%A2xxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%28xxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%29%2Cxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0A%E2%80%A2xxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxx%E2%80%94xxxxxxxxxxxxxxxxxxx%E2%80%94xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0A%E2%80%A2xxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxx%2Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%28xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%29x%0D%0A%0D%0Axxxxxxxxxxxxxxxxxx%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%3A%0D%0A%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx%0D%0A%0D%0A%E2%80%A2xxxx";
    MHD_post_process( postprocessor, chunk, strlen(chunk) );
    MHD_post_process( postprocessor, "", 0 );
    MHD_destroy_post_processor( postprocessor );
    return EXIT_SUCCESS;
}

Reply via email to