From ec9af8feb6daf59401eec9c91db027cffe651eb3 Mon Sep 17 00:00:00 2001
From: GoD-Tony <GoD-Tony@users.noreply.github.com>
Date: Thu, 1 Dec 2016 09:44:23 +0100
Subject: [PATCH] Fix null check when generating signature. (#562)

---
 tools/ida_scripts/makesig.idc | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/tools/ida_scripts/makesig.idc b/tools/ida_scripts/makesig.idc
index e8569d4a..a6e5ccb8 100644
--- a/tools/ida_scripts/makesig.idc
+++ b/tools/ida_scripts/makesig.idc
@@ -44,15 +44,22 @@ static main()
 		// isTail(GetFlags(pAddress)) == Operand
 		// ((GetFlags(pAddress) & MS_CODE) == FF_IMMD) == :iiam:
 		
-		if (pInfo.n == 1 && (pInfo.Op0.type == o_near || pInfo.Op0.type == o_far)) {
-			if (Byte(pAddress) == 0x0F) { // Two-byte instruction
-				sig = sig + sprintf("0F %02X ", Byte(pAddress + 1)) + PrintWildcards(GetDTSize(pInfo.Op0.dtyp));
-			} else {
-				sig = sig + sprintf("%02X ", Byte(pAddress)) + PrintWildcards(GetDTSize(pInfo.Op0.dtyp));
+		auto bDone = 0;
+		
+		if (pInfo.n == 1) {
+			if (pInfo.Op0.type == o_near || pInfo.Op0.type == o_far) {
+				if (Byte(pAddress) == 0x0F) { // Two-byte instruction
+					sig = sig + sprintf("0F %02X ", Byte(pAddress + 1)) + PrintWildcards(GetDTSize(pInfo.Op0.dtyp));
+				} else {
+					sig = sig + sprintf("%02X ", Byte(pAddress)) + PrintWildcards(GetDTSize(pInfo.Op0.dtyp));
+				}
+				bDone = 1;
 			}
-		} else { // unknown, just wildcard addresses
-			auto i = 0;
-			for (i = 0; i < pInfo.size; i++) {
+		}
+		
+		if (!bDone) { // unknown, just wildcard addresses
+			auto i = 0, itemSize = ItemSize(pAddress);
+			for (i = 0; i < itemSize; i++) {
 				auto pLoc = pAddress + i;
 				if (GetFixupTgtType(pLoc) == FIXUP_OFF32) {
 					sig = sig + PrintWildcards(4);