c++.command-line - problems with sscanf : small example
-
C
(20/20)
Mar 20 2004
#include
- Walter (23/23) Mar 21 2004 Thanks, I'll check it out. BTW, if that code appears in libcurl, it look...
#include <stdio.h> int main () { char* url =3D "http://www.google.com"; char proto[4096]; char path[4096]; printf("%d\n",sscanf(url, "%64[^:]:%[^\n]", proto, path)); puts(proto); puts(path); } Expected output is 2 http //www.google.com Actual output is one new line. Thanks! Charles -- = D Newsgroup.
Mar 20 2004
Thanks, I'll check it out. BTW, if that code appears in libcurl, it looks to me like an exploitable buffer overflow problem. "C" <dont respond.com> wrote in message news:opr46nwb0xehmtou localhost... #include <stdio.h> int main () { char* url = "http://www.google.com"; char proto[4096]; char path[4096]; printf("%d\n",sscanf(url, "%64[^:]:%[^\n]", proto, path)); puts(proto); puts(path); } Expected output is 2 http //www.google.com Actual output is one new line. Thanks! Charles -- D Newsgroup.
Mar 21 2004
"Walter" <walter digitalmars.com> wrote in message news:c3jkml$kti$1 digitaldaemon.com...Thanks, I'll check it out.It is a bug in sscanf, fixed now.
Mar 21 2004
Thanks, I'll check it out. BTW, if that code appears in libcurl, it =looks to me like an exploitable buffer overflow problem.Nah that was just a small example, they dynamically allocate space for = path.It is a bug in sscanf, fixed now.Awesome! When can we download an update ? Thanks, C On Sun, 21 Mar 2004 01:20:07 -0800, Walter <walter digitalmars.com> wrot= e:"Walter" <walter digitalmars.com> wrote in message news:c3jkml$kti$1 digitaldaemon.com...-- = D Newsgroup.Thanks, I'll check it out.It is a bug in sscanf, fixed now.
Mar 21 2004
"C" <dont respond.com> wrote in message news:opr473cp0dehmtou localhost...Awesome! When can we download an update ?I don't want to do an update just for that, but I can email it to you.
Mar 21 2004
Ok im at qbert atari-soldiers.com. Preciate you ;). C On Sun, 21 Mar 2004 10:19:08 -0800, Walter <walter digitalmars.com> wrot= e:"C" <dont respond.com> wrote in message =news:opr473cp0dehmtou localhost...Awesome! When can we download an update ?I don't want to do an update just for that, but I can email it to you.=-- = D Newsgroup.
Mar 21 2004
That got it :). Libcurl for D now works on windows also. I'd like to =
post the makefile to libcurl but currently the preprocessor is choking o=
n =
the CFINIT and CINIT macros with the errors
CINIT(FILE, OBJECTPOINT, 1),
^
../include\curl/curl.h(366) : Error: '}' expected
CFINIT(NOTHING), /********* the first one is unused **********=
**/
^
../include\curl/curl.h(899) : Error: '}' expected
CFINIT(COPYNAME),
^
../include\curl/curl.h(902) : Error: missing ',' between declaration of =
'CURLFO
M_' and 'COPYNAME'
CURLformoption option;
^
../include\curl/curl.h(930) : Error: ';' expected following declaration =
of =
stru
t member
CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
^
../include\curl/easy.h(30) : Error: ')' expected
Fatal error: too many errors
--- errorlevel 1
those are defined as
#ifdef CURL_ISOCPP
#define
#else
#define CFINIT(name) CURLFORM_/**/name
#endif
and
#ifdef CURL_ISOCPP
#define
e =
+ number
#else
#define CINIT(name,type,number) CURLOPT_/**/name =3D type + number
#endif
The same error message is generated wether CURL_ISOCPP is defined or not=
. =
Its used like
typedef enum {
/* This is the FILE * or void * the regular output should be written =
to. =
*/
CINIT(FILE, OBJECTPOINT, 1),
/* The full URL to get/put */
CINIT(URL, OBJECTPOINT, 2),
/* Port number to connect to, if other than default. */
CINIT(PORT, LONG, 3),
/* Name of proxy to use. */
CINIT(PROXY, OBJECTPOINT, 4),
/* "name:password" to use when fetching. */
CINIT(USERPWD, OBJECTPOINT, 5),
/* "name:password" to use with proxy. */
CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
...
and
typedef enum {
CFINIT(COPYNAME),
CFINIT(PTRNAME),
CFINIT(NAMELENGTH),
CFINIT(COPYCONTENTS),
CFINIT(PTRCONTENTS),
CFINIT(CONTENTSLENGTH),
...
Thanks!
Charles
On Sun, 21 Mar 2004 12:44:18 -0800, C <dont respond.com> wrote:
Ok im at qbert atari-soldiers.com. Preciate you ;).
C
On Sun, 21 Mar 2004 10:19:08 -0800, Walter <walter digitalmars.com> =
wrote:
"C" <dont respond.com> wrote in message =
news:opr473cp0dehmtou localhost...
Awesome! When can we download an update ?
I don't want to do an update just for that, but I can email it to you=
.
-- =
D Newsgroup.
Mar 23 2004
I attempted to reconstruct your code, filling in missing stuff, into the following file which compiles successfully. (This is why I am so adamant about, when posting bug reports, please leave nothing to my imagination! There's always something critical left out.) --------------------------------------------------------------- #define CURLOPTTYPE_OBJECTPOINT 1 #define CURLOPTTYPE_LONG 2 #define CURL_ISOCPP 1 #ifdef CURL_ISOCPP #define #else #define CFINIT(name) CURLFORM_/**/name #endif #ifdef CURL_ISOCPP #define number #else #define CINIT(name,type,number) CURLOPT_/**/name = type + number #endif typedef enum { /* This is the FILE * or void * the regular output should be written to. */ CINIT(FILE, OBJECTPOINT, 1), /* The full URL to get/put */ CINIT(URL, OBJECTPOINT, 2), /* Port number to connect to, if other than default. */ CINIT(PORT, LONG, 3), /* Name of proxy to use. */ CINIT(PROXY, OBJECTPOINT, 4), /* "name:password" to use when fetching. */ CINIT(USERPWD, OBJECTPOINT, 5), /* "name:password" to use with proxy. */ CINIT(PROXYUSERPWD, OBJECTPOINT, 6), } y; typedef enum { CFINIT(COPYNAME), CFINIT(PTRNAME), CFINIT(NAMELENGTH), CFINIT(COPYCONTENTS), CFINIT(PTRCONTENTS), CFINIT(CONTENTSLENGTH), } x;
Mar 23 2004
Ugh, your right CURL_ISOCPP was getting undefined somewhere else :(. = Sorry! Thanks for the time , libcurl is invaluable to me, so I = appreciated your attention on all of this. Thanks as usual, Charlie On Tue, 23 Mar 2004 23:56:38 -0800, Walter <walter digitalmars.com> wrot= e:I attempted to reconstruct your code, filling in missing stuff, into t=hefollowing file which compiles successfully. (This is why I am so adama=ntabout, when posting bug reports, please leave nothing to my imaginatio=n!There's always something critical left out.) --------------------------------------------------------------- #define CURLOPTTYPE_OBJECTPOINT 1 #define CURLOPTTYPE_LONG 2 #define CURL_ISOCPP 1 #ifdef CURL_ISOCPP #define #else#define CFINIT(name) CURLFORM_/**/name #endif #ifdef CURL_ISOCPP #defineype +number #else #define CINIT(name,type,number) CURLOPT_/**/name =3D type + number #endif typedef enum { /* This is the FILE * or void * the regular output should be writte=n =to. */ CINIT(FILE, OBJECTPOINT, 1), /* The full URL to get/put */ CINIT(URL, OBJECTPOINT, 2), /* Port number to connect to, if other than default. */ CINIT(PORT, LONG, 3), /* Name of proxy to use. */ CINIT(PROXY, OBJECTPOINT, 4), /* "name:password" to use when fetching. */ CINIT(USERPWD, OBJECTPOINT, 5), /* "name:password" to use with proxy. */ CINIT(PROXYUSERPWD, OBJECTPOINT, 6), } y; typedef enum { CFINIT(COPYNAME), CFINIT(PTRNAME), CFINIT(NAMELENGTH), CFINIT(COPYCONTENTS), CFINIT(PTRCONTENTS), CFINIT(CONTENTSLENGTH), } x;-- = D Newsgroup.
Mar 24 2004








C <dont respond.com>