/* $OpenLDAP$ */
/* This work is part of OpenLDAP Software <http://www.openldap.org/>.
*
- * Copyright 2000-2007 The OpenLDAP Foundation.
+ * Copyright 2000-2011 The OpenLDAP Foundation.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
{
int flags = REWRITE_REGEX_EXTENDED | REWRITE_REGEX_ICASE;
int mode = REWRITE_RECURSE;
- int max_passes = info->li_max_passes_per_rule;
+ int max_passes;
struct rewrite_rule *rule = NULL;
struct rewrite_subst *subst = NULL;
assert( context != NULL );
assert( pattern != NULL );
assert( result != NULL );
-
/*
* A null flagstring should be allowed
*/
+ max_passes = info->li_max_passes_per_rule;
+
/*
* Take care of substitution string
*/
* REGEX compilation (luckily I don't need to take care of this ...)
*/
if ( regcomp( &rule->lr_regex, ( char * )pattern, flags ) != 0 ) {
- free( rule );
goto fail;
}
rule->lr_pattern = strdup( pattern );
rule->lr_subststring = strdup( result );
rule->lr_flagstring = strdup( flagstring );
+ if ( rule->lr_pattern == NULL
+ || rule->lr_subststring == NULL
+ || rule->lr_flagstring == NULL )
+ {
+ goto fail;
+ }
/*
* Load compiled data into rule
return REWRITE_SUCCESS;
fail:
+ if ( rule ) {
+ if ( rule->lr_pattern ) free( rule->lr_pattern );
+ if ( rule->lr_subststring ) free( rule->lr_subststring );
+ if ( rule->lr_flagstring ) free( rule->lr_flagstring );
+ free( rule );
+ }
destroy_actions( first_action );
free( subst );
return REWRITE_ERR;