On 26/01/2011 16:28, Simone Caruso wrote:
Hi list,

i can't understand the reason i can't read from an "apr array", my code is like 
this:

//The 2 arrays, now working on reqc->aliases
reqc->aliases = (apr_array_header_t *)apr_array_make(r->pool, 5, 
sizeof(alias_t));
reqc->redirects = (apr_array_header_t *)apr_array_make(r->pool, 5, 
sizeof(alias_t));

while (attributes[i]) {
if (strcasecmp (attributes[i], "apacheServerName") == 0) {
reqc->name = apr_pstrdup (r->pool, vals[i]);
} else if (strcasecmp (attributes[i], "apacheServerAdmin") == 0) {
reqc->admin = apr_pstrdup (r->pool, vals[i]);
} else if (strcasecmp (attributes[i], "apacheDocumentRoot") == 0) {
reqc->docroot = apr_pstrdup (r->pool, vals[i]);
} else if (strcasecmp (attributes[i], "apacheScriptAlias") == 0) {
cur = strstr(vals[i], " ");
if(cur - vals[i] > 1 ){
tmp = apr_palloc(r->pool, sizeof(char)*strlen(vals[i]));
strcpy(tmp, vals[i]);
tok = NULL;
alias = apr_array_push(reqc->aliases);//HERE THE PUSH
alias->src = apr_strtok((char *)tmp , " ", &tok);
alias->dst = apr_strtok(NULL, " ", &tok);
alias->iscgi = 1;
isalias = 1;
}else{
ap_log_rerror(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r,
"[mod_vhost_ldap_ng.c]: Wrong apacheScriptAlias paramter: %s", vals[i]);
}
} else if (strcasecmp (attributes[i], "apacheAlias") == 0) {
cur = strstr(vals[i], " ");
if(cur - vals[i] > 1 ){
tmp = apr_palloc(r->pool, sizeof(char)*strlen(vals[i]));
strcpy(tmp, vals[i]);
tok = NULL;
alias = apr_array_push(reqc->aliases); //HERE THE PUSH
alias->src = apr_strtok((char *)vals[i] , " ", &tok);
alias->dst = apr_strtok(NULL, " ", &tok);
alias->iscgi = 0;
isalias = 1;


Now i need to read the array (i read mod_alias.c):
for(k = 0; k < reqc->aliases->nelts ; k++){
alias = (alias_t *)&reqc->aliases->elts[k];
isalias = alias_matches(r->uri, alias->src);
if(isalias > 0)
break;
}


I don't understand why, when k=2, alias structure is filled with wrong 
addresses:

(gdb)
658 isalias = alias_matches(r->uri, alias->src);
(gdb)

Program received signal SIGSEGV, Segmentation fault.
0x00007fc350e6784f in alias_matches (uri=0x94f820 "/",
alias_fakename=0xda000000000094ff <Address 0xda000000000094ff out of bounds>)


I tried a for like this without success (like mod_alias.c):
for(k = 0; k < reqc->aliases->nelts -1 ; ++k){


Any idea?
thanks!



Ehm.. i solved the problem in this way:
alias_t *aliasp = (alias_t *)reqc->aliases->elts;
for(k = 0; k < reqc->aliases->nelts ; k++){
        alias = (alias_t *) &aliasp[k];
        isalias = alias_matches(r->uri, alias->src);
        if(isalias > 0)
                break;

Thanks anyway!

--
Simone Caruso
IT Consultant
+39 349 65 90 805
p.iva: 03045250838

Reply via email to