File tree Expand file tree Collapse file tree 1 file changed +13
-3
lines changed Expand file tree Collapse file tree 1 file changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -292,10 +292,20 @@ int VSITarReader::GotoNextFile()
292
292
}
293
293
if (m_abyBufferIdx < m_abyBufferSize)
294
294
{
295
- osNextFileName. assign (
295
+ const char *pszFilename =
296
296
reinterpret_cast <const char *>(m_abyBuffer +
297
- nFilenameStartIdx),
298
- m_abyBufferIdx - nFilenameStartIdx);
297
+ nFilenameStartIdx);
298
+ osNextFileName.assign (
299
+ pszFilename,
300
+ CPLStrnlen (pszFilename,
301
+ m_abyBufferIdx - nFilenameStartIdx));
302
+ if (osNextFileName.empty () || osNextFileName == " ." ||
303
+ osNextFileName.find (" .." ) != std::string::npos)
304
+ {
305
+ CPLError (CE_Failure, CPLE_AppDefined,
306
+ " Invalid filename" );
307
+ return false ;
308
+ }
299
309
nCurOffset = VSIFTellL (fp);
300
310
nCurOffset -= m_abyBufferSize;
301
311
nCurOffset += m_abyBufferIdx + 1 ;
You can’t perform that action at this time.
0 commit comments