@@ -1363,31 +1363,35 @@ vsi_l_offset VSICurlHandle::GetFileSizeOrHeaders(bool bSetError,
13631363 }
13641364 }
13651365
1366- curl_off_t nSizeTmp = 0 ;
1367- const CURLcode code = curl_easy_getinfo (
1368- hCurlHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &nSizeTmp);
1369- CPL_IGNORE_RET_VAL (dfSize);
1370- dfSize = static_cast <double >(nSizeTmp);
1371- if (code == 0 )
1366+ if (response_code < 400 )
13721367 {
1373- oFileProp.eExists = EXIST_YES;
1374- if (dfSize < 0 )
1368+ curl_off_t nSizeTmp = 0 ;
1369+ const CURLcode code = curl_easy_getinfo (
1370+ hCurlHandle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &nSizeTmp);
1371+ CPL_IGNORE_RET_VAL (dfSize);
1372+ dfSize = static_cast <double >(nSizeTmp);
1373+ if (code == 0 )
13751374 {
1376- if (osVerb == " HEAD" && !bRetryWithGet && response_code == 200 )
1375+ oFileProp.eExists = EXIST_YES;
1376+ if (dfSize < 0 )
13771377 {
1378- CPLDebug (
1379- poFS->GetDebugKey (),
1380- " HEAD did not provide file size. Retrying with GET" );
1381- bRetryWithGet = true ;
1382- CPLFree (sWriteFuncData .pBuffer );
1383- CPLFree (sWriteFuncHeaderData .pBuffer );
1384- curl_easy_cleanup (hCurlHandle);
1385- goto retry;
1378+ if (osVerb == " HEAD" && !bRetryWithGet &&
1379+ response_code == 200 )
1380+ {
1381+ CPLDebug (poFS->GetDebugKey (),
1382+ " HEAD did not provide file size. Retrying "
1383+ " with GET" );
1384+ bRetryWithGet = true ;
1385+ CPLFree (sWriteFuncData .pBuffer );
1386+ CPLFree (sWriteFuncHeaderData .pBuffer );
1387+ curl_easy_cleanup (hCurlHandle);
1388+ goto retry;
1389+ }
1390+ oFileProp.fileSize = 0 ;
13861391 }
1387- oFileProp.fileSize = 0 ;
1392+ else
1393+ oFileProp.fileSize = static_cast <GUIntBig>(dfSize);
13881394 }
1389- else
1390- oFileProp.fileSize = static_cast <GUIntBig>(dfSize);
13911395 }
13921396
13931397 if (sWriteFuncHeaderData .pBuffer != nullptr &&
@@ -1605,7 +1609,8 @@ vsi_l_offset VSICurlHandle::GetFileSizeOrHeaders(bool bSetError,
16051609 // directory, curl will retry with an URL with slash added.
16061610 if (!osEffectiveURL.empty () &&
16071611 strncmp (osURL.c_str (), osEffectiveURL.c_str (), osURL.size ()) == 0 &&
1608- osEffectiveURL[osURL.size ()] == ' /' )
1612+ osEffectiveURL[osURL.size ()] == ' /' &&
1613+ oFileProp.eExists != EXIST_NO)
16091614 {
16101615 oFileProp.eExists = EXIST_YES;
16111616 oFileProp.fileSize = 0 ;
0 commit comments