Komfortabler Dateimanager mit vielen Funktionen

Sichere Stringfunktionen

By Sven on 19.12.2005 - 11:48 in Windows SDK

Seit SpeedCommander 10.1 verwende ich selbst nur noch sichere Stringfunktionen. Im Gegensatz zu den herkömmlichen Funktionen lstrcpy und lstrcpyn muss hier immer die Größe des Zielpuffers angegeben werden. Somit wird vermieden, dass über den Puffer hinaus geschrieben wird. Außerdem wird sichergestellt, dass der Zielpuffer in jedem Fall mit einem NULL-Zeichen abgeschlossen wird.

Nach der von Secunia entdeckten Schwachstelle in den Packfunktionen habe ich nun auch den von Rainer übernommenen Quellcode komplett auf die sicheren Stringfunktionen umgestellt, damit so etwas nicht noch einmal passiert. Bei der 64bit-Version der CxCab60u.dll gab es jedoch ein kleines Problem:

1>Linking...
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCchCopyA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCatWorkerA already defined in strsafe.lib(strsafe.obj)
1>fci_x64.lib(buildcab.obj) : error LNK2005: StringCchCatA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCchCopyA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCatWorkerA already defined in strsafe.lib(strsafe.obj)
1>fdi_x64.lib(fdi.obj) : error LNK2005: StringCchCatA already defined in strsafe.lib(strsafe.obj)
1>   Creating library .\objs\x64\Unicode Release\CxCab60u.lib and object .\objs\x64\Unicode Release\CxCab60u.exp
1>..\..\lib\x64\CxCab60u.dll : fatal error LNK1169: one or more multiply defined symbols found

Die Bibliotheken für die CAB-Funktionen aus dem Platform SDK (fci.lib und fdi.lib) enthalten bereits einige Funktionen aus der strsafe.lib. Um den Linker doch noch zu einer Zusammenarbeit zu überreden, muss man als zusätzliche Linkeroption „/FORCE:MULTIPLE“ angeben. Damit wird der Linker angewiesen, die zweite Definition zu ignorieren:

1>Linking...
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCchCopyA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCatWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fci_x64.lib(buildcab.obj) : warning LNK4006: StringCchCatA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCopyWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringLengthWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCchCopyA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCatWorkerA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>fdi_x64.lib(fdi.obj) : warning LNK4006: StringCchCatA already defined in strsafe.lib(strsafe.obj); second definition ignored
1>   Creating library .\objs\x64\Unicode Release\CxCab60u.lib and object .\objs\x64\Unicode Release\CxCab60u.exp
1>..\..\lib\x64\CxCab60u.dll : warning LNK4088: image being generated due to /FORCE option; image may not run
1>Embedding manifest...
1>CxCab - 0 error(s), 11 warning(s)

Es können keine Kommentare abgegeben werden.

Top