From e86d3a7658a04bcf188dbebd514c147ef9ec04dd Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 26 Dec 2012 18:44:24 -0500 Subject: [PATCH 1/2] Fix crash in PtGetCameraNumber() --- Sources/Plasma/FeatureLib/pfCamera/plVirtualCamNeu.cpp | 7 +++++-- Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Sources/Plasma/FeatureLib/pfCamera/plVirtualCamNeu.cpp b/Sources/Plasma/FeatureLib/pfCamera/plVirtualCamNeu.cpp index 15648f62..9f85f786 100644 --- a/Sources/Plasma/FeatureLib/pfCamera/plVirtualCamNeu.cpp +++ b/Sources/Plasma/FeatureLib/pfCamera/plVirtualCamNeu.cpp @@ -226,8 +226,11 @@ plVirtualCam1::~plVirtualCam1() // for saving camera stack plCameraModifier1* plVirtualCam1::GetCameraNumber(size_t camNumber) -{ - return (fCameraStack[camNumber]); +{ + if (fCameraStack.size() > camNumber) + return fCameraStack[camNumber]; + else + return nil; } // for rebuilding camera stack void plVirtualCam1::RebuildStack(const plKey& key) diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp b/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp index 1efb9e2e..94c0562f 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp @@ -2462,7 +2462,7 @@ int cyMisc::GetNumCameras() const char* cyMisc::GetCameraNumber(int number) { plCameraModifier1* pCam = plVirtualCam1::Instance()->GetCameraNumber(number-1); - if (pCam->GetTarget()) + if (pCam && pCam->GetTarget()) { const char* ret = pCam->GetTarget()->GetKeyName().c_str(); plString str = plString::Format("saving camera named %s to chronicle\n",ret); From 8091fffa1dc68a240bcca367331b46eb4eb78ebd Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 26 Dec 2012 18:46:47 -0500 Subject: [PATCH 2/2] Use plString in PtGetCameraNumber() --- Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp | 8 ++++---- Sources/Plasma/FeatureLib/pfPython/cyMisc.h | 2 +- Sources/Plasma/FeatureLib/pfPython/cyMiscGlue4.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp b/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp index 94c0562f..1179dfb4 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/cyMisc.cpp @@ -2459,14 +2459,14 @@ int cyMisc::GetNumCameras() return (plVirtualCam1::Instance()->GetNumCameras()); } -const char* cyMisc::GetCameraNumber(int number) +plString cyMisc::GetCameraNumber(int number) { plCameraModifier1* pCam = plVirtualCam1::Instance()->GetCameraNumber(number-1); if (pCam && pCam->GetTarget()) { - const char* ret = pCam->GetTarget()->GetKeyName().c_str(); - plString str = plString::Format("saving camera named %s to chronicle\n",ret); - plVirtualCam1::Instance()->AddMsgToLog(str.c_str()); + plString ret = pCam->GetTarget()->GetKeyName(); + plString log = plString::Format("saving camera named %s to chronicle\n", ret.c_str()); + plVirtualCam1::Instance()->AddMsgToLog(log.c_str()); return ret; } plVirtualCam1::Instance()->AddMsgToLog("sending empty to camera chronicle\n"); diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMisc.h b/Sources/Plasma/FeatureLib/pfPython/cyMisc.h index 507e27eb..2011c167 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMisc.h +++ b/Sources/Plasma/FeatureLib/pfPython/cyMisc.h @@ -809,7 +809,7 @@ public: // static int GetNumCameras(); - static const char* GetCameraNumber(int number); + static plString GetCameraNumber(int number); static void RebuildCameraStack(const plString& name, const char* ageName); static void PyClearCameraStack(); static void RecenterCamera(); diff --git a/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue4.cpp b/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue4.cpp index c77a8d0e..1694765d 100644 --- a/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue4.cpp +++ b/Sources/Plasma/FeatureLib/pfPython/cyMiscGlue4.cpp @@ -337,7 +337,7 @@ PYTHON_GLOBAL_METHOD_DEFINITION(PtGetCameraNumber, args, "Params: x\nReturns cam PyErr_SetString(PyExc_TypeError, "PtGetCameraNumber expects an int"); PYTHON_RETURN_ERROR; } - return PyString_FromString(cyMisc::GetCameraNumber(x)); + return PyString_FromPlString(cyMisc::GetCameraNumber(x)); } PYTHON_GLOBAL_METHOD_DEFINITION_NOARGS(PtGetNumCameras, "returns camera stack size")