[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] don't use regexp in commit.c
[Thread Prev] | [Thread Next]
- Subject: Re: [PATCH] don't use regexp in commit.c
- From: Aris Adamantiadis <aris@xxxxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Sat, 12 Feb 2011 12:32:29 +0100
- To: libssh@xxxxxxxxxx
Hi Bernhard, Thanks for you feedback. I have a few questions about your patch ; You enumerate a good list of bugs,but why remove the broken code when you can fix it ? Did you run into bug caused by it ? ssh_init() call may be indeed omitted by caller, but if you look it's the first function being called by ssh_connect. Is there a specific reason you prefered to remove it ? Thanks, Aris Le 11/02/11 23:02, Bernhard R. Link a écrit : > Remove the use of regexec in commit.c. > > This fixes several problems of the old code by removing it: > - ssh_regex_init not checking malloc() result for NULL. > - connect.c setting _POSIX_C_SOURCE too late to have effect. > - this was most likely the reason config.h was not included > before the system headers (so this is added back) > - ssh_regex_init printing error message to stderro but > documentation saying it is "set". > - ssh_regex_init set only called by ssh_init, which documents > itself it may "be omitted if your program is not multithreaded" > (and i_regex not tested for NULL in connect.c) > > --- > Not tested at all... > > include/libssh/priv.h | 2 - > src/connect.c | 76 +++++++++++++----------------------------------- > src/init.c | 3 -- > 3 files changed, 21 insertions(+), 60 deletions(-) > > diff --git a/include/libssh/priv.h b/include/libssh/priv.h > index 66f24e2..4dbc445 100644 > --- a/include/libssh/priv.h > +++ b/include/libssh/priv.h > @@ -172,8 +172,6 @@ void ssh_packet_set_callbacks(ssh_session session, ssh_packet_callbacks callback > void ssh_packet_set_default_callbacks(ssh_session session); > void ssh_packet_process(ssh_session session, uint8_t type); > /* connect.c */ > -int ssh_regex_init(void); > -void ssh_regex_finalize(void); > socket_t ssh_connect_host(ssh_session session, const char *host,const char > *bind_addr, int port, long timeout, long usec); > socket_t ssh_connect_host_nonblocking(ssh_session session, const char *host, > diff --git a/src/connect.c b/src/connect.c > index ec0a2ca..b962c78 100644 > --- a/src/connect.c > +++ b/src/connect.c > @@ -21,6 +21,8 @@ > * MA 02111-1307, USA. > */ > > +#include "config.h" > + > #include <errno.h> > #include <fcntl.h> > #include <stdio.h> > @@ -78,14 +80,6 @@ > #error "Your system must have getaddrinfo()" > #endif > > -#ifdef HAVE_REGCOMP > -/* don't declare gnu extended regexp's */ > -#ifndef _POSIX_C_SOURCE > -#define _POSIX_C_SOURCE > -#endif > -#include <regex.h> > -#endif /* HAVE_REGCOMP */ > - > #ifdef _WIN32 > void ssh_sock_set_nonblocking(socket_t sock) { > u_long nonblocking = 1; > @@ -118,53 +112,27 @@ void ssh_sock_set_blocking(socket_t sock) { > > #endif /* _WIN32 */ > > -#ifdef HAVE_REGCOMP > -#define IPEXPR "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$" > - > -static regex_t *ip_regex = NULL; > - > -/** @internal > - * @brief initializes and compile the regexp to be used for IP matching > - * @returns -1 on error (and error message is set) > - * @returns 0 on success > - */ > -int ssh_regex_init(){ > - if(ip_regex==NULL){ > - int err; > - regex_t *regex=malloc(sizeof (regex_t)); > - ZERO_STRUCTP(regex); > - err = regcomp(regex, IPEXPR, REG_EXTENDED | REG_NOSUB); > - if(err != 0){ > - char buffer[128]; > - regerror(err,regex,buffer,sizeof(buffer)); > - fprintf(stderr,"Error while compiling regular expression : %s\n",buffer); > - SAFE_FREE(regex); > - return -1; > - } > - ip_regex=regex; > - } > - return 0; > -} > - > -/** @internal > - * @brief clean up the IP regexp > - */ > -void ssh_regex_finalize(){ > - if(ip_regex){ > - regfree(ip_regex); > - SAFE_FREE(ip_regex); > +static int isipaddr(const char *hostname) { > + int number = 0, gotnumber = 0, block = 0; > + > + for ( ; *hostname != '\0' ; hostname++) { > + if (*hostname == '.') { > + if (!gotnumber || block > 2 || number > 255) > + return 0; > + block++; > + gotnumber = 0; > + number = 0; > + } else if (*hostname >= '0' && *hostname <= '9') { > + gotnumber = 1; > + if (number > 25) > + return 0; > + number = number*10 + (*hostname - '0'); > + } else > + return 0; > } > + return block == 3 && gotnumber && number <= 255; > } > > -#else /* HAVE_REGCOMP */ > -int ssh_regex_init(){ > - return 0; > -} > -void ssh_regex_finalize(){ > -} > -#endif > - > - > static int ssh_connect_socket_close(socket_t s){ > #ifdef _WIN32 > return closesocket(s); > @@ -194,13 +162,11 @@ static int getai(ssh_session session, const char *host, int port, struct addrinf > hints.ai_flags=AI_NUMERICSERV; > #endif > } > -#ifdef HAVE_REGCOMP > - if(regexec(ip_regex,host,0,NULL,0) == 0){ > + if(isipaddr(host)){ > /* this is an IP address */ > ssh_log(session,SSH_LOG_PACKET,"host %s matches an IP address",host); > hints.ai_flags |= AI_NUMERICHOST; > } > -#endif > return getaddrinfo(host, service, &hints, ai); > } > > diff --git a/src/init.c b/src/init.c > index 385cb7a..7b29d2b 100644 > --- a/src/init.c > +++ b/src/init.c > @@ -57,8 +57,6 @@ int ssh_init(void) { > return -1; > if(ssh_socket_init()) > return -1; > - if(ssh_regex_init()) > - return -1; > return 0; > } > > @@ -74,7 +72,6 @@ int ssh_init(void) { > */ > int ssh_finalize(void) { > ssh_threads_finalize(); > - ssh_regex_finalize(); > ssh_crypto_finalize(); > ssh_socket_cleanup(); > #ifdef HAVE_LIBGCRYPT
Re: [PATCH] don't use regexp in commit.c | "Bernhard R. Link" <brlink@xxxxxxxxxx> |
[PATCH] don't use regexp in commit.c | "Bernhard R. Link" <brlink@xxxxxxxxxx> |