Loading CHANGES +7 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,13 @@ Changelog Daniel (10 May 2006) - Fixed DICT in two aspects: 1 - allow properly URL-escaped words, like using %20 for spaces 2 - properly escape certain letters within a word to comply to the RFC2229 Daniel (9 May 2006) - Andreas Ntaflos reported a bug in libcurl.m4: When configuring my GNU autotools project, which optionally (default=yes) uses libcurl on a system Loading RELEASE-NOTES +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ This release includes the following changes: This release includes the following bugfixes: o dict with letters such as space in a word o dict with url-encoded words in the URL o libcurl.m4 when default=yes but no libcurl was found o numerous bugs fixed in the TFTP code o possible memory leak when adding easy handles to multi stack Loading lib/dict.c +53 −2 Original line number Diff line number Diff line Loading @@ -83,9 +83,46 @@ #define _MPRINTF_REPLACE /* use our functions only */ #include <curl/mprintf.h> /* The last #include file should be: */ #include "memdebug.h" static char *unescape_word(struct SessionHandle *data, char *inp) { char *newp; char *dictp; char *ptr; int len; unsigned char byte; int olen=0; newp = curl_easy_unescape(data, inp, 0, &len); if(!newp) return NULL; dictp = malloc(len*2 + 1); /* add one for terminating zero */ if(dictp) { /* According to RFC2229 section 2.2, these letters need to be escaped with \[letter] */ for(ptr = newp; (byte = (unsigned char)*ptr); ptr++) { if ((byte <= 32) || (byte == 127) || (byte == '\'') || (byte == '\"') || (byte == '\\')) { dictp[olen++] = '\\'; } dictp[olen++] = byte; } dictp[olen]=0; free(newp); } return dictp; } CURLcode Curl_dict(struct connectdata *conn, bool *done) { char *word; char *eword; char *ppath; char *database = NULL; char *strategy = NULL; Loading Loading @@ -135,6 +172,10 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) strategy = (char *)"."; } eword = unescape_word(data, word); if(!eword) return CURLE_OUT_OF_MEMORY; result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "MATCH " Loading @@ -145,8 +186,11 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) database, strategy, word eword ); free(eword); if(result) failf(data, "Failed sending DICT request"); else Loading Loading @@ -179,6 +223,10 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) database = (char *)"!"; } eword = unescape_word(data, word); if(!eword) return CURLE_OUT_OF_MEMORY; result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "DEFINE " Loading @@ -186,7 +234,10 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) "%s\r\n" /* word */ "QUIT\r\n", database, word); eword); free(eword); if(result) failf(data, "Failed sending DICT request"); else Loading Loading
CHANGES +7 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,13 @@ Changelog Daniel (10 May 2006) - Fixed DICT in two aspects: 1 - allow properly URL-escaped words, like using %20 for spaces 2 - properly escape certain letters within a word to comply to the RFC2229 Daniel (9 May 2006) - Andreas Ntaflos reported a bug in libcurl.m4: When configuring my GNU autotools project, which optionally (default=yes) uses libcurl on a system Loading
RELEASE-NOTES +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ This release includes the following changes: This release includes the following bugfixes: o dict with letters such as space in a word o dict with url-encoded words in the URL o libcurl.m4 when default=yes but no libcurl was found o numerous bugs fixed in the TFTP code o possible memory leak when adding easy handles to multi stack Loading
lib/dict.c +53 −2 Original line number Diff line number Diff line Loading @@ -83,9 +83,46 @@ #define _MPRINTF_REPLACE /* use our functions only */ #include <curl/mprintf.h> /* The last #include file should be: */ #include "memdebug.h" static char *unescape_word(struct SessionHandle *data, char *inp) { char *newp; char *dictp; char *ptr; int len; unsigned char byte; int olen=0; newp = curl_easy_unescape(data, inp, 0, &len); if(!newp) return NULL; dictp = malloc(len*2 + 1); /* add one for terminating zero */ if(dictp) { /* According to RFC2229 section 2.2, these letters need to be escaped with \[letter] */ for(ptr = newp; (byte = (unsigned char)*ptr); ptr++) { if ((byte <= 32) || (byte == 127) || (byte == '\'') || (byte == '\"') || (byte == '\\')) { dictp[olen++] = '\\'; } dictp[olen++] = byte; } dictp[olen]=0; free(newp); } return dictp; } CURLcode Curl_dict(struct connectdata *conn, bool *done) { char *word; char *eword; char *ppath; char *database = NULL; char *strategy = NULL; Loading Loading @@ -135,6 +172,10 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) strategy = (char *)"."; } eword = unescape_word(data, word); if(!eword) return CURLE_OUT_OF_MEMORY; result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "MATCH " Loading @@ -145,8 +186,11 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) database, strategy, word eword ); free(eword); if(result) failf(data, "Failed sending DICT request"); else Loading Loading @@ -179,6 +223,10 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) database = (char *)"!"; } eword = unescape_word(data, word); if(!eword) return CURLE_OUT_OF_MEMORY; result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "DEFINE " Loading @@ -186,7 +234,10 @@ CURLcode Curl_dict(struct connectdata *conn, bool *done) "%s\r\n" /* word */ "QUIT\r\n", database, word); eword); free(eword); if(result) failf(data, "Failed sending DICT request"); else Loading