Index: src/chext/MenuExt.cpp
===================================================================
diff -u -N -r134983cab6122e3fff73994a6f9c417aaeab3bc2 -rcb014b333936d2d95577380f4d6c2ca94ed8082c
--- src/chext/MenuExt.cpp	(.../MenuExt.cpp)	(revision 134983cab6122e3fff73994a6f9c417aaeab3bc2)
+++ src/chext/MenuExt.cpp	(.../MenuExt.cpp)	(revision cb014b333936d2d95577380f4d6c2ca94ed8082c)
@@ -126,17 +126,18 @@
 		TCHAR szText[ _MAX_PATH ];
 		int iCount = ::GetMenuItemCount(hMenu);
 
-		MENUITEMINFO mii;
-		mii.cbSize = sizeof(mii);
-		mii.fMask = MIIM_TYPE;
-		mii.dwTypeData = szText;
-		mii.cch = _MAX_PATH;
-
 		// find a place where the commands should be inserted
-		for(int i = 0; i < iCount; i++)
+		for(int iMenuIndex = 0; iMenuIndex < iCount; iMenuIndex++)
 		{
-			::GetMenuString(hMenu, i, szText, _MAX_PATH, MF_BYPOSITION);
+			MENUITEMINFO mii = { 0 };
+			mii.cbSize = sizeof(mii);
+			mii.fMask = MIIM_STRING;
+			mii.dwTypeData = szText;
+			mii.cch = _MAX_PATH;
 
+			if(!::GetMenuItemInfo(hMenu, iMenuIndex, TRUE, &mii))
+				continue;
+
 			// get rid of &
 			CutAmpersands(szText);
 			_tcslwr(szText);
@@ -147,15 +148,17 @@
 				_tcscmp(szText, _T("paste")) == 0 || _tcscmp(szText, _T("copy")) == 0)
 			{
 				// found - find the nearest bar and insert above
-				for(int j = i + 1; j < iCount; j++)
+				for(int j = iMenuIndex + 1; j < iCount; j++)
 				{
-					// find bar
-					::GetMenuItemInfo(hMenu, j, TRUE, &mii);
+					MENUITEMINFO miiInner = { 0 };
+					miiInner.cbSize = sizeof(miiInner);
+					miiInner.fMask = MIIM_FTYPE;
 
-					if(mii.fType == MFT_SEPARATOR)
+					// find bar
+					if(::GetMenuItemInfo(hMenu, j, TRUE, &miiInner) && miiInner.fType == MFT_SEPARATOR)
 					{
 						indexMenu = j;
-						i = iCount;
+						iMenuIndex = iCount;
 
 						break;
 					}