rem: sdataPtr->allowed = ns_malloc(ds.length + 1); memcpy(sdataPtr->allowed, ds.string, ds.length + 1);
add: sdataPtr->allowed = ns_malloc((size_t)(ds.length + 1)); memcpy(sdataPtr->allowed, ds.string, (size_t)(ds.length + 1));
context: NsDbInitServer(char *server){    Pool	   *poolPtr;    ServData	   *sdataPtr;    Tcl_HashEntry  *hPtr;    Tcl_HashSearch  search;    char           *path, *pool, *p;    Ns_DString	    ds;    int		    new;    path = Ns_ConfigGetPath(server, NULL, "db", NULL);    /*     * Verify the default pool exists, if any.     */    sdataPtr = ns_malloc(sizeof(ServData));    hPtr = Tcl_CreateHashEntry(&serversTable, server, &new);    Tcl_SetHashValue(hPtr, sdataPtr);    sdataPtr->defpool = Ns_ConfigGetValue(path, "defaultpool");    if (sdataPtr->defpool != NULL &&	(Tcl_FindHashEntry(&poolsTable, sdataPtr->defpool) == NULL)) {	Ns_Log(Error, "dbinit: no such default pool '%s'", sdataPtr->defpool);	sdataPtr->defpool = NULL;    }    /*     * Construct the allowed list and call the server-specific init.     */    sdataPtr->allowed = "";    pool = Ns_ConfigGetValue(path, "pools");    if (pool != NULL && poolsTable.numEntries > 0) {	Ns_DStringInit(&ds);    	if (STREQ(pool, "*")) {	    hPtr = Tcl_FirstHashEntry(&poolsTable, &search);	    while (hPtr != NULL) {	    	poolPtr = Tcl_GetHashValue(hPtr);	    	NsDbDriverInit(server, poolPtr->driverPtr);	    	Ns_DStringAppendArg(&ds, poolPtr->name);		hPtr = Tcl_NextHashEntry(&search);	    }	} else {	    p = pool;	    while (p != NULL && *p != '\0') {		p = strchr(pool, ',');		if (p != NULL) {		    *p = '\0';		}		hPtr = Tcl_FindHashEntry(&poolsTable, pool);		if (hPtr != NULL) {		    poolPtr = Tcl_GetHashValue(hPtr);	    	    NsDbDriverInit(server, poolPtr->driverPtr);	    	    Ns_DStringAppendArg(&ds, poolPtr->name);		}		if (p != NULL) {		    *p++ = ',';		}		pool = p;	    }	}    	sdataPtr->allowed = ns_malloc(ds.length + 1);    	memcpy(sdataPtr->allowed, ds.string, ds.length + 1);    	Ns_DStringFree(&ds);    }}