diff --git a/lib/http.c b/lib/http.c
index 6b1538a737..850bfaefa6 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -2040,27 +2040,26 @@ static CURLcode http_target(struct Curl_easy *data,
if(result)
return result;
- if(curl_strequal("ftp", data->state.up.scheme)) {
- if(data->set.proxy_transfer_mode) {
- /* when doing ftp, append ;type= if not present */
- char *type = strstr(path, ";type=");
- if(type && type[6] && type[7] == 0) {
- switch(Curl_raw_toupper(type[6])) {
- case 'A':
- case 'D':
- case 'I':
- break;
- default:
- type = NULL;
- }
- }
- if(!type) {
- result = curlx_dyn_addf(r, ";type=%c",
- data->state.prefer_ascii ? 'a' : 'i');
- if(result)
- return result;
+ if(curl_strequal("ftp", data->state.up.scheme) &&
+ data->set.proxy_transfer_mode) {
+ /* when doing ftp, append ;type= if not present */
+ size_t len = strlen(path);
+ bool type_present = FALSE;
+ if((len >= 7) && !memcmp(&path[len - 7], ";type=", 6)) {
+ switch(Curl_raw_toupper(path[len - 1])) {
+ case 'A':
+ case 'D':
+ case 'I':
+ type_present = TRUE;
+ break;
}
}
+ if(!type_present) {
+ result = curlx_dyn_addf(r, ";type=%c",
+ data->state.prefer_ascii ? 'a' : 'i');
+ if(result)
+ return result;
+ }
}
}