SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
A Check of the Open-Source Project 
WinSCP Developed in Embarcadero C++ 
Builder 
Author: Andrey Karpov 
Date: 24.04.2014 
C++ Builder support in PVS-Studio had been dropped after version 5.20. If you have any questions, feel 
free to contact our support. 
We regularly check open-source C/C++ projects, but what we check are mostly projects developed in the 
Visual Studio IDE. For some reason, we haven't paid much attention to the Embarcadero C++ Builder 
IDE. In order to improve this situation, we are going to discuss the WinSCP project I have checked 
recently. 
WinSCP 
WinSCP is a free and open-source SFTP, SCP and FTP client for Microsoft Windows. Its main function is 
secure file transfer between a local and a remote computer. Beyond this, WinSCP offers basic file 
manager and file synchronization functionality. Since July 16, 2003, it is licensed under the GNU GPL and 
hosted on SourceForge.net. 
The official website: http://winscp.net 
You need Embarcadero C++ Builder XE2 to build the project. 
Analysis 
Analysis was done with the PVS-Studio static analyzer. The tool currently supports the following IDEs: 
• Visual Studio 2013 C, C++, C++11, C++/CX (WinRT) 
• Visual Studio 2012 C, C++, C++11, C++/CX (WinRT)
• Visual Studio 2010 C, C++, C++0x 
• Visual Studio 2008 C, C++ 
• Visual Studio 2005 C, C++ 
• Embarcadero RAD Studio XE5 C, C++, C++11, 64-bit compiler included 
• Embarcadero RAD Studio XE4 C, C++, C++11, 64-bit compiler included 
• Embarcadero RAD Studio XE3 Update 1 C, C++, C++11, 64-bit compiler included 
• Embarcadero RAD Studio XE2 C, C++, C++0x 
• Embarcadero RAD Studio XE C, C++ 
• Embarcadero RAD Studio 2010 C, C++ 
• Embarcadero RAD Studio 2009 C, C++ 
• MinGW C, C++, C++11 
Besides, you can also work in PVS-Studio Standalone. It allows checking *.i files prepared in advance and 
monitoring the project build process in order to collect all the necessary information for a check. To find 
out more about it, see the article "PVS-Studio Now Supports Any Build System under Windows and Any 
Compiler". 
Analysis results 
There are not many errors in the project - but still enough to write an article to attract Embarcadero 
RAD Studio users' attention. 
Memset() function's arguments mixed up 
TForm * __fastcall TMessageForm::Create(....) 
{ 
.... 
LOGFONT AFont; 
.... 
memset(&AFont, sizeof(AFont), 0); 
.... 
} 
PVS-Studio's diagnostic message: V575 The 'memset' function processes '0' elements. Inspect the third 
argument. messagedlg.cpp 786 
The memset() function receives an array size as the third argument. It's an ordinary but very unpleasant 
typo resulting in the structure remaining uninitialized. 
There is a similar typo a bit farther in the code: messagedlg.cpp 796 
Using a nonexistent object 
void __fastcall TCustomScpExplorerForm::EditorAutoConfig() 
{
.... 
else 
{ 
.... 
TEditorList EditorList; 
EditorList = *WinConfiguration->EditorList; 
EditorList.Insert(0, new TEditorPreferences(EditorData)); 
WinConfiguration->EditorList = &EditorList; 
} 
.... 
} 
PVS-Studio's diagnostic message: V506 Pointer to local variable 'EditorList' is stored outside the scope of 
this variable. Such a pointer will become invalid. customscpexplorer.cpp 2633 
The 'EditorList' object will be destroyed immediately after leaving the scope. However, the programmer 
saves a pointer to this object and uses it after that. It leads to undefined behavior. 
Garbage in a dialog 
bool __fastcall RecursiveDeleteFile(....) 
{ 
SHFILEOPSTRUCT Data; 
memset(&Data, 0, sizeof(Data)); 
.... 
Data.pTo = L""; 
.... 
} 
PVS-Studio's diagnostic message: V540 Member 'pTo' should point to string terminated by two 0 
characters. common.cpp 1659 
Notice the following line in the pTo parameter's description in MSDN: "Note This string must be double-null 
terminated". 
Because of the error, the file-handling dialog will contain garbage - or it will not. It all depends on how 
lucky you are. But the code is incorrect anyway. 
A duplicated line 
int CFileZillaApi::Init(....)
{ 
.... 
m_pMainThread->m_hOwnerWnd=m_hOwnerWnd; 
m_pMainThread->m_hOwnerWnd=m_hOwnerWnd; 
.... 
} 
PVS-Studio's diagnostic message: V519 The 'm_pMainThread->m_hOwnerWnd' variable is assigned 
values twice successively. Perhaps this is a mistake. Check lines: 88, 89. filezillaapi.cpp 89 
Perhaps there is no error here - just one extra line written by mistake. 
Failed check 
STDMETHODIMP CShellExtClassFactory::CreateInstance(....) 
{ 
.... 
CShellExt* ShellExt = new CShellExt(); 
if (NULL == ShellExt) 
{ 
return E_OUTOFMEMORY; 
} 
.... 
} 
PVS-Studio's diagnostic message: V668 There is no sense in testing the 'ShellExt' pointer against null, as 
the memory was allocated using the 'new' operator. The exception will be generated in the case of 
memory allocation error. dragext.cpp 554 
The check "if (NULL == ShellExt)" is meaningless as the 'new' operator will throw the std::bad_alloc 
exception if it fails to allocate memory. 
A dangerous way to use the fprintf() function 
bool CAsyncSslSocketLayer::CreateSslCertificate(....) 
{ 
.... 
char buffer[1001]; 
int len; 
while ((len = pBIO_read(bio, buffer, 1000)) > 0)
{ 
buffer[len] = 0; 
fprintf(file, buffer); 
} 
.... 
} 
V618 It's dangerous to call the 'fprintf' function in such a manner, as the line being passed could contain 
format specification. The example of the safe code: printf("%s", str); asyncsslsocketlayer.cpp 2247 
If the buffer contains control specifiers while data are being written into the file, it will lead to an 
unpredictable result. The safe way of using the function is as follows: 
fprintf(file, "%s", buffer); 
This error can also be treated as a potential vulnerability. 
Something wrong with the 'err' variable 
static error_t 
client_send_propfind_request(....) 
{ 
.... 
error_t err = 0; 
int code = 0; 
apr_hash_t * props = NULL; 
const char * target = path_uri_encode(remote_path, pool); 
char * url_path = apr_pstrdup(pool, target); 
WEBDAV_ERR(neon_get_props(&props, ras, url_path, 
NEON_DEPTH_ZERO, starting_props, 
false, pool)); 
if (err && (err == WEBDAV_ERR_DAV_REQUEST_FAILED)) 
.... 
}
PVS-Studio's diagnostic message: V560 A part of conditional expression is always false: (err == 1003). 
webdavfilesystem.cpp 10990 
Conclusion 
Where are you, Embarcadero RAD Studio users? Hey! According to our statistics, they are very few. 
Well, come and try the PVS-Studio static analyzer!

Más contenido relacionado

La actualidad más candente

Virtual platform
Virtual platformVirtual platform
Virtual platform
sean chen
 
Processor Verification Using Open Source Tools and the GCC Regression Test Suite
Processor Verification Using Open Source Tools and the GCC Regression Test SuiteProcessor Verification Using Open Source Tools and the GCC Regression Test Suite
Processor Verification Using Open Source Tools and the GCC Regression Test Suite
DVClub
 
Presentation buffer overflow attacks and theircountermeasures
Presentation buffer overflow attacks and theircountermeasuresPresentation buffer overflow attacks and theircountermeasures
Presentation buffer overflow attacks and theircountermeasures
tharindunew
 
[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling
Douglas Chen
 

La actualidad más candente (20)

The CppCat Analyzer Checks TortoiseGit
The CppCat Analyzer Checks TortoiseGitThe CppCat Analyzer Checks TortoiseGit
The CppCat Analyzer Checks TortoiseGit
 
Best Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' MistakesBest Bugs from Games: Fellow Programmers' Mistakes
Best Bugs from Games: Fellow Programmers' Mistakes
 
Bug fix sharing : where does bug come from
Bug fix sharing : where does bug come fromBug fix sharing : where does bug come from
Bug fix sharing : where does bug come from
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable
 
Virtual platform
Virtual platformVirtual platform
Virtual platform
 
Heading for a Record: Chromium, the 5th Check
Heading for a Record: Chromium, the 5th CheckHeading for a Record: Chromium, the 5th Check
Heading for a Record: Chromium, the 5th Check
 
What has to be paid attention when reviewing code of the library you develop
What has to be paid attention when reviewing code of the library you developWhat has to be paid attention when reviewing code of the library you develop
What has to be paid attention when reviewing code of the library you develop
 
C++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical ReviewerC++ Code as Seen by a Hypercritical Reviewer
C++ Code as Seen by a Hypercritical Reviewer
 
Processor Verification Using Open Source Tools and the GCC Regression Test Suite
Processor Verification Using Open Source Tools and the GCC Regression Test SuiteProcessor Verification Using Open Source Tools and the GCC Regression Test Suite
Processor Verification Using Open Source Tools and the GCC Regression Test Suite
 
Linux version of PVS-Studio couldn't help checking CodeLite
Linux version of PVS-Studio couldn't help checking CodeLiteLinux version of PVS-Studio couldn't help checking CodeLite
Linux version of PVS-Studio couldn't help checking CodeLite
 
The Little Unicorn That Could
The Little Unicorn That CouldThe Little Unicorn That Could
The Little Unicorn That Could
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
08 - Return Oriented Programming, the chosen one
08 - Return Oriented Programming, the chosen one08 - Return Oriented Programming, the chosen one
08 - Return Oriented Programming, the chosen one
 
Работа с реляционными базами данных в C++
Работа с реляционными базами данных в C++Работа с реляционными базами данных в C++
Работа с реляционными базами данных в C++
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
 
Linux Kernel, tested by the Linux-version of PVS-Studio
Linux Kernel, tested by the Linux-version of PVS-StudioLinux Kernel, tested by the Linux-version of PVS-Studio
Linux Kernel, tested by the Linux-version of PVS-Studio
 
Presentation buffer overflow attacks and theircountermeasures
Presentation buffer overflow attacks and theircountermeasuresPresentation buffer overflow attacks and theircountermeasures
Presentation buffer overflow attacks and theircountermeasures
 
[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling[COSCUP 2020] How to use llvm frontend library-libtooling
[COSCUP 2020] How to use llvm frontend library-libtooling
 
Server Side JavaScript: Ajax.org O3
Server Side JavaScript: Ajax.org O3Server Side JavaScript: Ajax.org O3
Server Side JavaScript: Ajax.org O3
 
Server Side JavaScript: Ajax.org O3.
Server Side JavaScript: Ajax.org O3.Server Side JavaScript: Ajax.org O3.
Server Side JavaScript: Ajax.org O3.
 

Destacado

MWNW Toronto Community Night - Make Web Not War
MWNW Toronto Community Night - Make Web Not WarMWNW Toronto Community Night - Make Web Not War
MWNW Toronto Community Night - Make Web Not War
Frédéric Harper
 

Destacado (6)

Toronto User groups workshop - 2013-03-10 - HTML5 & Windows 8, friends with b...
Toronto User groups workshop - 2013-03-10 - HTML5 & Windows 8, friends with b...Toronto User groups workshop - 2013-03-10 - HTML5 & Windows 8, friends with b...
Toronto User groups workshop - 2013-03-10 - HTML5 & Windows 8, friends with b...
 
Lean mean php machine
Lean mean php machineLean mean php machine
Lean mean php machine
 
MWNW Toronto Community Night - Make Web Not War
MWNW Toronto Community Night - Make Web Not WarMWNW Toronto Community Night - Make Web Not War
MWNW Toronto Community Night - Make Web Not War
 
Technology Alliance Partner
Technology Alliance PartnerTechnology Alliance Partner
Technology Alliance Partner
 
AspectizeAndYou
AspectizeAndYouAspectizeAndYou
AspectizeAndYou
 
Where Content Goes to Die - An ExactTarget Connections Presentation by Chris ...
Where Content Goes to Die - An ExactTarget Connections Presentation by Chris ...Where Content Goes to Die - An ExactTarget Connections Presentation by Chris ...
Where Content Goes to Die - An ExactTarget Connections Presentation by Chris ...
 

Similar a A Check of the Open-Source Project WinSCP Developed in Embarcadero C++ Builder

Similar a A Check of the Open-Source Project WinSCP Developed in Embarcadero C++ Builder (20)

Intel IPP Samples for Windows - error correction
Intel IPP Samples for Windows - error correctionIntel IPP Samples for Windows - error correction
Intel IPP Samples for Windows - error correction
 
Intel IPP Samples for Windows - error correction
Intel IPP Samples for Windows - error correctionIntel IPP Samples for Windows - error correction
Intel IPP Samples for Windows - error correction
 
PVS-Studio vs Chromium. 3-rd Check
PVS-Studio vs Chromium. 3-rd CheckPVS-Studio vs Chromium. 3-rd Check
PVS-Studio vs Chromium. 3-rd Check
 
Analyzing the Blender project with PVS-Studio
Analyzing the Blender project with PVS-StudioAnalyzing the Blender project with PVS-Studio
Analyzing the Blender project with PVS-Studio
 
Re-checking the ReactOS project - a large report
Re-checking the ReactOS project - a large reportRe-checking the ReactOS project - a large report
Re-checking the ReactOS project - a large report
 
Checking the Cross-Platform Framework Cocos2d-x
Checking the Cross-Platform Framework Cocos2d-xChecking the Cross-Platform Framework Cocos2d-x
Checking the Cross-Platform Framework Cocos2d-x
 
PVS-Studio delved into the FreeBSD kernel
PVS-Studio delved into the FreeBSD kernelPVS-Studio delved into the FreeBSD kernel
PVS-Studio delved into the FreeBSD kernel
 
Checking OpenCV with PVS-Studio
Checking OpenCV with PVS-StudioChecking OpenCV with PVS-Studio
Checking OpenCV with PVS-Studio
 
Intel IPP Samples for Windows - error correction
Intel IPP Samples for Windows - error correctionIntel IPP Samples for Windows - error correction
Intel IPP Samples for Windows - error correction
 
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
PVS-Studio. Static code analyzer. Windows/Linux, C/C++/C#. 2017
 
Documenting Bugs in Doxygen
Documenting Bugs in DoxygenDocumenting Bugs in Doxygen
Documenting Bugs in Doxygen
 
100 bugs in Open Source C/C++ projects
100 bugs in Open Source C/C++ projects100 bugs in Open Source C/C++ projects
100 bugs in Open Source C/C++ projects
 
Rechecking TortoiseSVN with the PVS-Studio Code Analyzer
Rechecking TortoiseSVN with the PVS-Studio Code AnalyzerRechecking TortoiseSVN with the PVS-Studio Code Analyzer
Rechecking TortoiseSVN with the PVS-Studio Code Analyzer
 
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-StudioArcheology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
Archeology for Entertainment, or Checking Microsoft Word 1.1a with PVS-Studio
 
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
PVS-Studio and Continuous Integration: TeamCity. Analysis of the Open RollerC...
 
PVS-Studio vs Chromium
PVS-Studio vs ChromiumPVS-Studio vs Chromium
PVS-Studio vs Chromium
 
PVS-Studio vs Chromium
PVS-Studio vs ChromiumPVS-Studio vs Chromium
PVS-Studio vs Chromium
 
Checking 7-Zip with PVS-Studio analyzer
Checking 7-Zip with PVS-Studio analyzerChecking 7-Zip with PVS-Studio analyzer
Checking 7-Zip with PVS-Studio analyzer
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
 
Checking the Code of LDAP-Server ReOpenLDAP on Our Readers' Request
Checking the Code of LDAP-Server ReOpenLDAP on Our Readers' RequestChecking the Code of LDAP-Server ReOpenLDAP on Our Readers' Request
Checking the Code of LDAP-Server ReOpenLDAP on Our Readers' Request
 

Más de Andrey Karpov

Más de Andrey Karpov (20)

60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста60 антипаттернов для С++ программиста
60 антипаттернов для С++ программиста
 
60 terrible tips for a C++ developer
60 terrible tips for a C++ developer60 terrible tips for a C++ developer
60 terrible tips for a C++ developer
 
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...Ошибки, которые сложно заметить на code review, но которые находятся статичес...
Ошибки, которые сложно заметить на code review, но которые находятся статичес...
 
PVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error ExamplesPVS-Studio in 2021 - Error Examples
PVS-Studio in 2021 - Error Examples
 
PVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature OverviewPVS-Studio in 2021 - Feature Overview
PVS-Studio in 2021 - Feature Overview
 
PVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибокPVS-Studio в 2021 - Примеры ошибок
PVS-Studio в 2021 - Примеры ошибок
 
PVS-Studio в 2021
PVS-Studio в 2021PVS-Studio в 2021
PVS-Studio в 2021
 
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
Make Your and Other Programmer’s Life Easier with Static Analysis (Unreal Eng...
 
Does static analysis need machine learning?
Does static analysis need machine learning?Does static analysis need machine learning?
Does static analysis need machine learning?
 
Typical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and JavaTypical errors in code on the example of C++, C#, and Java
Typical errors in code on the example of C++, C#, and Java
 
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
How to Fix Hundreds of Bugs in Legacy Code and Not Die (Unreal Engine 4)
 
Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?Game Engine Code Quality: Is Everything Really That Bad?
Game Engine Code Quality: Is Everything Really That Bad?
 
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source SoftwareThe Use of Static Code Analysis When Teaching or Developing Open-Source Software
The Use of Static Code Analysis When Teaching or Developing Open-Source Software
 
Static Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal EngineStatic Code Analysis for Projects, Built on Unreal Engine
Static Code Analysis for Projects, Built on Unreal Engine
 
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded SystemsSafety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
Safety on the Max: How to Write Reliable C/C++ Code for Embedded Systems
 
The Great and Mighty C++
The Great and Mighty C++The Great and Mighty C++
The Great and Mighty C++
 
Static code analysis: what? how? why?
Static code analysis: what? how? why?Static code analysis: what? how? why?
Static code analysis: what? how? why?
 
Zero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for youZero, one, two, Freddy's coming for you
Zero, one, two, Freddy's coming for you
 
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOpsPVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
PVS-Studio Is Now in Chocolatey: Checking Chocolatey under Azure DevOps
 
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
PVS-Studio Static Analyzer as a Tool for Protection against Zero-Day Vulnerab...
 

Último

Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
masabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
 

Último (20)

Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptxArtyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 

A Check of the Open-Source Project WinSCP Developed in Embarcadero C++ Builder

  • 1. A Check of the Open-Source Project WinSCP Developed in Embarcadero C++ Builder Author: Andrey Karpov Date: 24.04.2014 C++ Builder support in PVS-Studio had been dropped after version 5.20. If you have any questions, feel free to contact our support. We regularly check open-source C/C++ projects, but what we check are mostly projects developed in the Visual Studio IDE. For some reason, we haven't paid much attention to the Embarcadero C++ Builder IDE. In order to improve this situation, we are going to discuss the WinSCP project I have checked recently. WinSCP WinSCP is a free and open-source SFTP, SCP and FTP client for Microsoft Windows. Its main function is secure file transfer between a local and a remote computer. Beyond this, WinSCP offers basic file manager and file synchronization functionality. Since July 16, 2003, it is licensed under the GNU GPL and hosted on SourceForge.net. The official website: http://winscp.net You need Embarcadero C++ Builder XE2 to build the project. Analysis Analysis was done with the PVS-Studio static analyzer. The tool currently supports the following IDEs: • Visual Studio 2013 C, C++, C++11, C++/CX (WinRT) • Visual Studio 2012 C, C++, C++11, C++/CX (WinRT)
  • 2. • Visual Studio 2010 C, C++, C++0x • Visual Studio 2008 C, C++ • Visual Studio 2005 C, C++ • Embarcadero RAD Studio XE5 C, C++, C++11, 64-bit compiler included • Embarcadero RAD Studio XE4 C, C++, C++11, 64-bit compiler included • Embarcadero RAD Studio XE3 Update 1 C, C++, C++11, 64-bit compiler included • Embarcadero RAD Studio XE2 C, C++, C++0x • Embarcadero RAD Studio XE C, C++ • Embarcadero RAD Studio 2010 C, C++ • Embarcadero RAD Studio 2009 C, C++ • MinGW C, C++, C++11 Besides, you can also work in PVS-Studio Standalone. It allows checking *.i files prepared in advance and monitoring the project build process in order to collect all the necessary information for a check. To find out more about it, see the article "PVS-Studio Now Supports Any Build System under Windows and Any Compiler". Analysis results There are not many errors in the project - but still enough to write an article to attract Embarcadero RAD Studio users' attention. Memset() function's arguments mixed up TForm * __fastcall TMessageForm::Create(....) { .... LOGFONT AFont; .... memset(&AFont, sizeof(AFont), 0); .... } PVS-Studio's diagnostic message: V575 The 'memset' function processes '0' elements. Inspect the third argument. messagedlg.cpp 786 The memset() function receives an array size as the third argument. It's an ordinary but very unpleasant typo resulting in the structure remaining uninitialized. There is a similar typo a bit farther in the code: messagedlg.cpp 796 Using a nonexistent object void __fastcall TCustomScpExplorerForm::EditorAutoConfig() {
  • 3. .... else { .... TEditorList EditorList; EditorList = *WinConfiguration->EditorList; EditorList.Insert(0, new TEditorPreferences(EditorData)); WinConfiguration->EditorList = &EditorList; } .... } PVS-Studio's diagnostic message: V506 Pointer to local variable 'EditorList' is stored outside the scope of this variable. Such a pointer will become invalid. customscpexplorer.cpp 2633 The 'EditorList' object will be destroyed immediately after leaving the scope. However, the programmer saves a pointer to this object and uses it after that. It leads to undefined behavior. Garbage in a dialog bool __fastcall RecursiveDeleteFile(....) { SHFILEOPSTRUCT Data; memset(&Data, 0, sizeof(Data)); .... Data.pTo = L""; .... } PVS-Studio's diagnostic message: V540 Member 'pTo' should point to string terminated by two 0 characters. common.cpp 1659 Notice the following line in the pTo parameter's description in MSDN: "Note This string must be double-null terminated". Because of the error, the file-handling dialog will contain garbage - or it will not. It all depends on how lucky you are. But the code is incorrect anyway. A duplicated line int CFileZillaApi::Init(....)
  • 4. { .... m_pMainThread->m_hOwnerWnd=m_hOwnerWnd; m_pMainThread->m_hOwnerWnd=m_hOwnerWnd; .... } PVS-Studio's diagnostic message: V519 The 'm_pMainThread->m_hOwnerWnd' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 88, 89. filezillaapi.cpp 89 Perhaps there is no error here - just one extra line written by mistake. Failed check STDMETHODIMP CShellExtClassFactory::CreateInstance(....) { .... CShellExt* ShellExt = new CShellExt(); if (NULL == ShellExt) { return E_OUTOFMEMORY; } .... } PVS-Studio's diagnostic message: V668 There is no sense in testing the 'ShellExt' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error. dragext.cpp 554 The check "if (NULL == ShellExt)" is meaningless as the 'new' operator will throw the std::bad_alloc exception if it fails to allocate memory. A dangerous way to use the fprintf() function bool CAsyncSslSocketLayer::CreateSslCertificate(....) { .... char buffer[1001]; int len; while ((len = pBIO_read(bio, buffer, 1000)) > 0)
  • 5. { buffer[len] = 0; fprintf(file, buffer); } .... } V618 It's dangerous to call the 'fprintf' function in such a manner, as the line being passed could contain format specification. The example of the safe code: printf("%s", str); asyncsslsocketlayer.cpp 2247 If the buffer contains control specifiers while data are being written into the file, it will lead to an unpredictable result. The safe way of using the function is as follows: fprintf(file, "%s", buffer); This error can also be treated as a potential vulnerability. Something wrong with the 'err' variable static error_t client_send_propfind_request(....) { .... error_t err = 0; int code = 0; apr_hash_t * props = NULL; const char * target = path_uri_encode(remote_path, pool); char * url_path = apr_pstrdup(pool, target); WEBDAV_ERR(neon_get_props(&props, ras, url_path, NEON_DEPTH_ZERO, starting_props, false, pool)); if (err && (err == WEBDAV_ERR_DAV_REQUEST_FAILED)) .... }
  • 6. PVS-Studio's diagnostic message: V560 A part of conditional expression is always false: (err == 1003). webdavfilesystem.cpp 10990 Conclusion Where are you, Embarcadero RAD Studio users? Hey! According to our statistics, they are very few. Well, come and try the PVS-Studio static analyzer!