Re: cvs: php4 /ext/standard metaphone.c

From: Date: Wed, 20 Mar 2002 08:32:00 +0000
Subject: Re: cvs: php4 /ext/standard metaphone.c
References: 1  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-10465@lists.php.net to get a copy of this message
Hello Markus, do you want to MFH this one? Derick On Wed, 20 Mar 2002, Markus Fischer wrote: > mfischer Wed Mar 20 03:17:09 2002 EDT > > Modified files: > /php4/ext/standard metaphone.c > Log: > - Fix for #16176. > > > > Index: php4/ext/standard/metaphone.c > diff -u php4/ext/standard/metaphone.c:1.20 php4/ext/standard/metaphone.c:1.21 > --- php4/ext/standard/metaphone.c:1.20 Thu Feb 28 03:26:46 2002 > +++ php4/ext/standard/metaphone.c Wed Mar 20 03:17:06 2002 > @@ -16,7 +16,7 @@ > +----------------------------------------------------------------------+ > */ > > -/* $Id: metaphone.c,v 1.20 2002/02/28 08:26:46 sebastian Exp $ */ > +/* $Id: metaphone.c,v 1.21 2002/03/20 08:17:06 mfischer Exp $ */ > > /* > Based on CPANs "Text-Metaphone-1.96" by Michael G Schwern <schwern@pobox.com> > > @@ -25,7 +25,7 @@ > #include "php.h" > #include "php_metaphone.h" > > -static int metaphone(char *word, int max_phonemes, char **phoned_word, int traditional); > +static int metaphone(char *word, int word_len, int max_phonemes, char **phoned_word, int > traditional); > > PHP_FUNCTION(metaphone); > > @@ -42,7 +42,7 @@ > return; > } > > - if (metaphone(str, phones, &result, 1) == 0) { > + if (metaphone(str, str_len, phones, &result, 1) == 0) { > RETVAL_STRING(result, 0); > } else { > if (result) { > @@ -139,8 +139,19 @@ > } > > > -/* phonize one letter */ > -#define Phonize(c) {(*phoned_word)[p_idx++] = c;} > +/* phonize one letter > + * We don't know the buffers size in advance. On way to solve this is to just > + * re-allocate the buffer size. We're using an extra of 2 characters (this > + * could be one though; or more too). */ > +#define Phonize(c) { \ > + if (p_idx >= max_buffer_len) { \ > + if (NULL == (*phoned_word = erealloc(*phoned_word, max_buffer_len + 2))) { \ > + return -1; \ > + } \ > + max_buffer_len += 2; \ > + } \ > + (*phoned_word)[p_idx++] = c; \ > + } > /* Slap a null character on the end of the phoned word */ > #define End_Phoned_Word {(*phoned_word)[p_idx] = '\0';} > /* How long is the phoned word? */ > @@ -151,10 +162,11 @@ > > /* {{{ metaphone > */ > -static int metaphone(char *word, int max_phonemes, char **phoned_word, int traditional) > +static int metaphone(char *word, int word_len, int max_phonemes, char **phoned_word, int > traditional) > { > int w_idx = 0; /* point in the phonization we're at. */ > int p_idx = 0; /* end of the phoned phrase */ > + int max_buffer_len = 0; /* maximum length of the destination buffer */ > > /*-- Parameter checks --*/ > /* Negative phoneme length is meaningless */ > @@ -171,10 +183,12 @@ > > /*-- Allocate memory for our phoned_phrase --*/ > if (max_phonemes == 0) { /* Assume largest possible */ > - *phoned_word = emalloc(sizeof(char) * strlen(word) + 1); > + max_buffer_len = word_len; > + *phoned_word = emalloc(sizeof(char) * word_len + 1); > if (!*phoned_word) > return -1; > } else { > + max_buffer_len = max_phonemes; > *phoned_word = emalloc(sizeof(char) * max_phonemes + 1); > if (!*phoned_word) > return -1; > > > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > ----------------------------------------------------------------------- PHP: Scripting the Web - derick@php.net All your branches are belong to me! SRM: Script Running Machine - www.vl-srm.net -----------------------------------------------------------------------

« previous php.cvs (#10465) next »