[Scummvm-cvs-logs] scummvm master -> 07568931cef05d609e4a2335593fb9ed53ecee57

m-kiewitz m_kiewitz at users.sourceforge.net
Mon Jan 27 23:32:13 CET 2014


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
07568931ce SCI: fix null pointer access in logKernelCall


Commit: 07568931cef05d609e4a2335593fb9ed53ecee57
    https://github.com/scummvm/scummvm/commit/07568931cef05d609e4a2335593fb9ed53ecee57
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2014-01-27T14:31:40-08:00

Commit Message:
SCI: fix null pointer access in logKernelCall

method was/is used for debugging only
CID 1003612

Changed paths:
    engines/sci/engine/scriptdebug.cpp



diff --git a/engines/sci/engine/scriptdebug.cpp b/engines/sci/engine/scriptdebug.cpp
index 2774371..37ec4e8 100644
--- a/engines/sci/engine/scriptdebug.cpp
+++ b/engines/sci/engine/scriptdebug.cpp
@@ -737,37 +737,39 @@ void logKernelCall(const KernelFunction *kernelCall, const KernelSubFunction *ke
 			case SIG_TYPE_REFERENCE:
 			{
 				SegmentObj *mobj = s->_segMan->getSegmentObj(argv[parmNr].getSegment());
-				switch (mobj->getType()) {
-				case SEG_TYPE_HUNK:
-				{
-					HunkTable *ht = (HunkTable *)mobj;
-					int index = argv[parmNr].getOffset();
-					if (ht->isValidEntry(index)) {
-						// NOTE: This ", deleted" isn't as useful as it could
-						// be because it prints the status _after_ the kernel
-						// call.
-						debugN(" ('%s' hunk%s)", ht->_table[index].type, ht->_table[index].mem ? "" : ", deleted");
-					} else
-						debugN(" (INVALID hunk ref)");
-					break;
-				}
-				default:
-					// TODO: Any other segment types which could
-					// use special handling?
-
-					if (kernelCall->function == kSaid) {
-						SegmentRef saidSpec = s->_segMan->dereference(argv[parmNr]);
-						if (saidSpec.isRaw) {
-							debugN(" ('");
-							g_sci->getVocabulary()->debugDecipherSaidBlock(saidSpec.raw);
-							debugN("')");
+				if (mobj) {
+					switch (mobj->getType()) {
+					case SEG_TYPE_HUNK:
+					{
+						HunkTable *ht = (HunkTable *)mobj;
+						int index = argv[parmNr].getOffset();
+						if (ht->isValidEntry(index)) {
+							// NOTE: This ", deleted" isn't as useful as it could
+							// be because it prints the status _after_ the kernel
+							// call.
+							debugN(" ('%s' hunk%s)", ht->_table[index].type, ht->_table[index].mem ? "" : ", deleted");
+						} else
+							debugN(" (INVALID hunk ref)");
+						break;
+					}
+					default:
+						// TODO: Any other segment types which could
+						// use special handling?
+
+						if (kernelCall->function == kSaid) {
+							SegmentRef saidSpec = s->_segMan->dereference(argv[parmNr]);
+							if (saidSpec.isRaw) {
+								debugN(" ('");
+								g_sci->getVocabulary()->debugDecipherSaidBlock(saidSpec.raw);
+								debugN("')");
+							} else {
+								debugN(" (non-raw said-spec)");
+							}
 						} else {
-							debugN(" (non-raw said-spec)");
+							debugN(" ('%s')", s->_segMan->getString(argv[parmNr]).c_str());
 						}
-					} else {
-						debugN(" ('%s')", s->_segMan->getString(argv[parmNr]).c_str());
+						break;
 					}
-					break;
 				}
 			}
 			default:






More information about the Scummvm-git-logs mailing list