Package: curl
Version: 7.19.5-1
Severity: normal

Hello.

cURL doesn't support application/x-www-form-urlencoded encoding, and this is
stated explicitly nowhere in the documentation, thus causing much confustion

As per http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1,
application/x-www-form-urlencoded encoding differs from one described in
RFC1738, and is performed as follows:

   1. Control names and values are escaped. Space characters are replaced by
`+', and then reserved characters are escaped as described in RFC1738,
section 2.2: Non-alphanumeric characters are replaced by `%HH', a percent
sign and two hexadecimal digits representing the ASCII code of the character.
Line breaks are represented as "CR LF" pairs (i.e., `%0D%0A').

   2. The control names/values are listed in the order they appear in the
document. The name is separated from the value by `=' and name/value pairs
are separated from each other by `&'.

This is not supported by cURL, so should be stated explicitly. Function
should be implemented that performs the conversion. Or, corresponding fixes need
to be made to curl_escape/curl_unescape. Maybe, an option can be made to switch
between the modes.

-- 
WBR, Andrew

-- System Information:
Debian Release: 5.0
  APT prefers sid
  APT policy: (500, 'sid'), (500, 'unstable'), (500, 'testing'), (500, 
'stable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.26-1-686 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_US.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages curl depends on:
ii  libc6                  2.10.1-7          GNU C Library: Shared libraries
ii  libcurl3               7.19.7-1          Multi-protocol file transfer libra
ii  zlib1g                 1:1.2.3.3.dfsg-14 compression library - runtime

curl recommends no packages.

curl suggests no packages.

-- no debconf information
/* curl-test.c */
/* Compile with `make curl-test LOADLIBES=-lcurl` */

#include <stdio.h>
#include <curl/curl.h>

int main()
{
  char test[] = "http://en.wikipedia.org/w/index.php?title=Curl+(disambiguation)&action=view";
  char * decoded = curl_unescape(test, 0);
  printf("original:\n%s\nunescaped:\n%s\n", test, decoded);
  curl_free(decoded);
  return 0;
}

Reply via email to