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!


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

Reply via email to