)
{
size_t subs_len;
- struct berval **subs = NULL;
+ struct berval **subs = NULL, **tmps;
struct rewrite_submatch **submatch = NULL;
struct rewrite_subst *s = NULL;
for ( p = begin = result, subs_len = 0; p[ 0 ] != '\0'; p++ ) {
/*
- * Keep only single escapes '\'
+ * Keep only single escapes '%'
*/
if ( p[ 0 ] != REWRITE_SUBMATCH_ESCAPE ) {
continue;
- } else if ( p[ 1 ] == REWRITE_SUBMATCH_ESCAPE ) {
+ }
+ if ( p[ 1 ] == REWRITE_SUBMATCH_ESCAPE ) {
+ AC_MEMCPY((char *)p, p + 1, strlen( p ) );
continue;
}
nsub++;
- subs = (struct berval **)realloc( subs,
+ tmps = (struct berval **)realloc( subs,
sizeof( struct berval * )*( nsub + 1 ) );
- if ( subs == NULL ) {
+ if ( tmps == NULL ) {
/* cleanup */
return NULL;
}
+ subs = tmps;
subs[ nsub ] = NULL;
/*
if ( subs[ nsub - 1 ]->bv_val == NULL ) {
return NULL;
}
- strncpy( subs[ nsub - 1 ]->bv_val, begin, l );
+ AC_MEMCPY( subs[ nsub - 1 ]->bv_val, begin, l );
subs[ nsub - 1 ]->bv_val[ l ] = '\0';
} else {
subs[ nsub - 1 ] = NULL;
/*
* Substitution pattern
*/
- if ( isdigit( p[ 1 ] ) ) {
+ if ( isdigit( (unsigned char) p[ 1 ] ) ) {
int d = p[ 1 ] - '0';
+ struct rewrite_submatch **tmpsm;
/*
* Add a new value substitution scheme
*/
- submatch = realloc( submatch,
+ tmpsm = realloc( submatch,
sizeof( struct rewrite_submatch * )*( nsub + 1 ) );
- if ( submatch == NULL ) {
+ if ( tmpsm == NULL ) {
/* cleanup */
return NULL;
}
+ submatch = tmpsm;
submatch[ nsub ] = NULL;
+
submatch[ nsub - 1 ] =
calloc( sizeof( struct rewrite_submatch ), 1 );
if ( submatch[ nsub - 1 ] == NULL ) {
*/
} else if ( p[ 1 ] == '{' ) {
struct rewrite_map *map;
+ struct rewrite_submatch **tmpsm;
map = rewrite_map_parse( info, p + 2, &begin );
if ( map == NULL ) {
/*
* Add a new value substitution scheme
*/
- submatch = realloc( submatch,
+ tmpsm = realloc( submatch,
sizeof( struct rewrite_submatch * )*( nsub + 1 ) );
- if ( submatch == NULL ) {
+ if ( tmpsm == NULL ) {
/* cleanup */
return NULL;
}
+ submatch = tmpsm;
submatch[ nsub ] = NULL;
submatch[ nsub - 1 ] =
calloc( sizeof( struct rewrite_submatch ), 1 );
/*
* Last part of string
*/
- subs = realloc( subs, sizeof( struct berval *)*( nsub + 2 ) );
- if ( subs == NULL ) {
+ tmps = realloc( subs, sizeof( struct berval *)*( nsub + 2 ) );
+ if ( tmps == NULL ) {
/*
* XXX need to free the value subst stuff!
*/
free( submatch );
return NULL;
}
-
+
+ subs = tmps;
subs[ nsub + 1 ] = NULL;
l = p - begin;
if ( l > 0 ) {
subs_len += l;
subs[ nsub ]->bv_len = l;
subs[ nsub ]->bv_val = malloc( l + 1 );
- strncpy( subs[ nsub ]->bv_val, begin, l );
+ AC_MEMCPY( subs[ nsub ]->bv_val, begin, l );
subs[ nsub ]->bv_val[ l ] = '\0';
} else {
subs[ nsub ] = NULL;
return REWRITE_ERR;
}
- strncpy( val->bv_val, s, l );
+ AC_MEMCPY( val->bv_val, s, l );
val->bv_val[ l ] = '\0';
return REWRITE_SUCCESS;
*/
for ( n = 0, cl = 0; n < subst->lt_num_submatch; n++ ) {
if ( subst->lt_subs[ n ] != NULL ) {
- strcpy( res + cl, subst->lt_subs[ n ]->bv_val);
+ AC_MEMCPY( res + cl, subst->lt_subs[ n ]->bv_val,
+ subst->lt_subs[ n ]->bv_len );
cl += subst->lt_subs[ n ]->bv_len;
}
- strcpy( res + cl, submatch[ n ].bv_val );
+ AC_MEMCPY( res + cl, submatch[ n ].bv_val,
+ submatch[ n ].bv_len );
cl += submatch[ n ].bv_len;
free( submatch[ n ].bv_val );
}
if ( subst->lt_subs[ n ] != NULL ) {
- strcpy( res + cl, subst->lt_subs[ n ]->bv_val );
+ AC_MEMCPY( res + cl, subst->lt_subs[ n ]->bv_val,
+ subst->lt_subs[ n ]->bv_len );
}
val->bv_val = res;