patch from Stefan Kratochwil <entwicklung@inovel.de> : canfestival-3-fm3_698.patch
Bug:
If an object dictionary entry was requested whose size exceeds
SDO_MAX_LENGTH_TRANSFERT, the memcpy() call at line 139 of objacces.c overwrites
the memory after *pDestData which causes stack corruption.
-> Bugfix:
The bug was corrected by size checking the requested data. An 'Out of
memory' error message will be generated if the requested data exceeds
SDO_MAX_LENGTH_TRANSFERT.
Additional changes:
Added dynamic buffer allocation for the SDO transfer. This feature can be used
if SDO_DYNAMIC_BUFFER_ALLOCATION is defined in config.h. The size of the
dynamically allocated buffer is controlled with
SDO_DYNAMIC_BUFFER_ALLOCATION_SIZE.
-> Note:
This change removes the detection of OD_LENGTH_DATA_INVALID errors!
; This file is part of CanFestival, a library implementing CanOpen Stack.
;
; CanFestival Copyright (C): Edouard TISSERANT and Francis DUPIN
; CanFestival Win32 port Copyright (C) 2007 Leonid Tochinski, ChattenAssociates, Inc.
;
; See COPYING file for copyrights details.
;
; This library is free software; you can redistribute it and/or
; modify it under the terms of the GNU Lesser General Public
; License as published by the Free Software Foundation; either
; version 2.1 of the License, or (at your option) any later version.
;
; This library is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
; Lesser General Public License for more details.
;
; You should have received a copy of the GNU Lesser General Public
; License along with this library; if not, write to the Free Software
; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
; CanFestival-3.def : Declares DLL exports.
LIBRARY "CanFestival-3.DLL"
EXPORTS
; dcf.h
send_consise_dcf
; lifegrd.h
_heartbeatError
_post_SlaveBootup
_post_SlaveStateChange
getNodeState
heartbeatInit
heartbeatStop
proceedNODE_GUARD
; nmtMaster.h
masterSendNMTstateChange
masterSendNMTnodeguard
masterRequestNodeState
; nmtSlave.h
proceedNMTstateChange
slaveSendBootUp
; objacces.h
_storeODSubIndex
accessDictionaryError
_getODentry
_setODentry
scanIndexOD
RegisterSetODentryCallBack
; pdo.h
buildPDO
sendPDOrequest
proceedPDO
sendPDOevent
_sendPDOevent
PDOInit
PDOStop
PDOEventTimerAlarm
PDOInhibitTimerAlarm
CopyBits
; sdo.h
SDOTimeoutAlarm
resetSDO
SDOlineToObjdict
objdictToSDOline
lineToSDO
SDOtoLine
failedSDO
resetSDOline
initSDOline
getSDOfreeLine
getSDOlineOnUse
closeSDOtransfer
getSDOlineRestBytes
setSDOlineRestBytes
sendSDO
sendSDOabort
proceedSDO
writeNetworkDict
writeNetworkDictCallBack
readNetworkDict
readNetworkDictCallback
getReadResultNetworkDict
getWriteResultNetworkDict
; states.h
_operational
_preOperational
_initialisation
_stopped
canDispatch
getState
setState
getNodeId
setNodeId
;initPreOperationalMode
; sync.h
startSYNC
stopSYNC
_post_sync
_post_TPDO
sendSYNC
proceedSYNC
; emcy.h
emergencyInit
emergencyStop
EMCY_setError
EMCY_errorRecovered
_post_emcy
; timer.h
SetAlarm
DelAlarm
TimeDispatch
setTimer
getElapsedTime
; timers_driver.h
TimerInit
TimerCleanup
StartTimerLoop
StopTimerLoop
CreateReceiveTask
; win32/canfestival.h
LoadCanDriver
canSend
canOpen
canClose
LeaveMutex
EnterMutex