private void processInvokeSpecial() { String methodName = getNameConstantOperand(); if (Values.CONSTRUCTOR.equals(methodName)) { String className = getClassConstantOperand(); String sig = getSigConstantOperand(); if (!hasMapComparator && "java/util/TreeMap".equals(className)) { List<String> parmSignatures = SignatureUtils.getParameterSignatures(sig); if (hasComparator(parmSignatures)) { hasMapComparator = true; } } else if (!hasSetComparator && "java/util/TreeSet".equals(className)) { List<String> parmSignatures = SignatureUtils.getParameterSignatures(sig); if (hasComparator(parmSignatures)) { hasSetComparator = true; } } } }
private void processInvokeSpecial() { String methodName = getNameConstantOperand(); if (Values.CONSTRUCTOR.equals(methodName)) { String className = getClassConstantOperand(); String sig = getSigConstantOperand(); if (!hasMapComparator && "java/util/TreeMap".equals(className)) { List<String> parmSignatures = SignatureUtils.getParameterSignatures(sig); if (hasComparator(parmSignatures)) { hasMapComparator = true; } } else if (!hasSetComparator && "java/util/TreeSet".equals(className)) { List<String> parmSignatures = SignatureUtils.getParameterSignatures(sig); if (hasComparator(parmSignatures)) { hasSetComparator = true; } } } }
private void processInvokeInterface() { String className = getClassConstantOperand(); String methodName = getNameConstantOperand(); String methodSig = getSigConstantOperand(); if (Values.SLASHED_JAVA_UTIL_MAP.equals(className) && "put".equals(methodName) && SignatureBuilder.SIG_TWO_OBJECTS_TO_OBJECT.equals(methodSig)) { if (stack.getStackDepth() > 1) { OpcodeStack.Item itm = stack.getStackItem(1); String pushedSig = itm.getSignature(); if (pushedSig.startsWith(Values.SIG_ARRAY_PREFIX)) { foundBugFor(mapBugs); } } } else if (Values.SLASHED_JAVA_UTIL_SET.equals(className) && "add".equals(methodName) && SignatureBuilder.SIG_OBJECT_TO_BOOLEAN.equals(methodSig)) { if (stack.getStackDepth() > 0) { OpcodeStack.Item itm = stack.getStackItem(0); String pushedSig = itm.getSignature(); if (pushedSig.startsWith(Values.SIG_ARRAY_PREFIX)) { foundBugFor(setBugs); } } } else if (Values.SLASHED_JAVA_UTIL_LIST.equals(className) && "contains".equals(methodName) && SignatureBuilder.SIG_OBJECT_TO_BOOLEAN.equals(methodSig) && (stack.getStackDepth() > 0)) { OpcodeStack.Item itm = stack.getStackItem(0); String pushedSig = itm.getSignature(); if (pushedSig.startsWith(Values.SIG_ARRAY_PREFIX)) { foundBugFor(null); } } }
private void processInvokeInterface() { String className = getClassConstantOperand(); String methodName = getNameConstantOperand(); String methodSig = getSigConstantOperand(); if (Values.SLASHED_JAVA_UTIL_MAP.equals(className) && "put".equals(methodName) && SignatureBuilder.SIG_TWO_OBJECTS_TO_OBJECT.equals(methodSig)) { if (stack.getStackDepth() > 1) { OpcodeStack.Item itm = stack.getStackItem(1); String pushedSig = itm.getSignature(); if (pushedSig.startsWith(Values.SIG_ARRAY_PREFIX)) { foundBugFor(mapBugs); } } } else if (Values.SLASHED_JAVA_UTIL_SET.equals(className) && "add".equals(methodName) && SignatureBuilder.SIG_OBJECT_TO_BOOLEAN.equals(methodSig)) { if (stack.getStackDepth() > 0) { OpcodeStack.Item itm = stack.getStackItem(0); String pushedSig = itm.getSignature(); if (pushedSig.startsWith(Values.SIG_ARRAY_PREFIX)) { foundBugFor(setBugs); } } } else if (Values.SLASHED_JAVA_UTIL_LIST.equals(className) && "contains".equals(methodName) && SignatureBuilder.SIG_OBJECT_TO_BOOLEAN.equals(methodSig) && (stack.getStackDepth() > 0)) { OpcodeStack.Item itm = stack.getStackItem(0); String pushedSig = itm.getSignature(); if (pushedSig.startsWith(Values.SIG_ARRAY_PREFIX)) { foundBugFor(null); } } }