rem: request->urlv = (char **) ns_malloc(ds1.length); memcpy(request->urlv, ds1.string, ds1.length);
add: request->urlv = (char **) ns_malloc((size_t)ds1.length); memcpy(request->urlv, ds1.string, (size_t)ds1.length);
context: SetUrl(Ns_Request * request, char *url){    Ns_DString  ds1, ds2;    char       *p;    Ns_DStringInit(&ds1);    Ns_DStringInit(&ds2);    /*     * Look for a query string at the end of the URL.     */        p = strchr(url, '?');    if (p != NULL) {        *p++ = '\0';        if (request->query != NULL) {            ns_free(request->query);        }        request->query = ns_strdup(p);    }    /*     * Decode and normalize the URL.     */    p = Ns_DecodeUrlCharset(&ds1, url, NULL);    if (p == NULL) {        p = url;    }    Ns_NormalizePath(&ds2, p);    Ns_DStringTrunc(&ds1, 0);    /*     * Append a trailing slash to the normalized URL if the original URL     * ended in slash that wasn't also the leading slash.     */    while (*url == '/') {        ++url;    }    if (*url != '\0' && url[strlen(url) - 1] == '/') {        Ns_DStringAppend(&ds2, "/");    }    request->url = ns_strdup(ds2.string);    Ns_DStringFree(&ds2);    /*     * Build the urlv and set urlc.     */    p = ns_strdup(request->url + 1);    Ns_DStringNAppend(&ds1, (char *) &p, sizeof(char *));    while (*p != '\0') {        if (*p == '/') {            *p++ = '\0';            if (*p == '\0') {		/*		 * Stop on a trailing slash.		 */		                break;            }            Ns_DStringNAppend(&ds1, (char *) &p, sizeof(char *));        }        ++p;    }    request->urlc = ds1.length / (sizeof(char *));    p = NULL;    Ns_DStringNAppend(&ds1, (char *) &p, sizeof(char *));    request->urlv = (char **) ns_malloc(ds1.length);    memcpy(request->urlv, ds1.string, ds1.length);    Ns_DStringFree(&ds1);}