Refine search
@Override public void sawOpcode(int seen) { if (seen != Const.PUTFIELD) { return; } XField xFieldOperand = getXFieldOperand(); if (xFieldOperand != null && xFieldOperand.equals(targetField) && stack.getStackItem(1).getRegisterNumber() == 0) { putfields.put(getPC(), new OpcodeStack.Item(stack.getStackItem(0))); } }
&& "(Ljava/lang/Object;)Z".equals(getSigConstantOperand()) && stack.getStackDepth() >= 2) { OpcodeStack.Item it0 = stack.getStackItem(0); int r0 = it0.getRegisterNumber(); OpcodeStack.Item it1 = stack.getStackItem(1); int r1 = it1.getRegisterNumber(); if (r0 == r1 && r0 > 0) { bugReporter.reportBug(new BugInstance(this, "IL_CONTAINER_ADDED_TO_ITSELF", NORMAL_PRIORITY).addClassAndMethod( OpcodeStack.Item it = stack.getStackItem(parameters - 1 - i); if (!it.isInitialParameter() || it.getRegisterNumber() != i) { match1 = false; sameMethod = p.isInitialParameter() && p.getRegisterNumber() == 0 && sig.equals("L" + getClassName() + ";");
String fieldName = (String) stack.getStackItem(0).getConstant(); String fieldSignature = (String) stack.getStackItem(1).getConstant(); String fieldClass = (String) stack.getStackItem(2).getConstant(); if (fieldName != null && fieldSignature != null && fieldClass != null) { XField f = XFactory.createXField(fieldClass.replace('/', '.'), fieldName, ClassName.toSignature(fieldSignature), if (stack.getStackDepth() > pos) { OpcodeStack.Item item = stack.getStackItem(pos); boolean superCall = seen == Const.INVOKESPECIAL && !invokedClassName.equals(getClassName()); boolean selfCall = item.getRegisterNumber() == 0 && !superCall; if (selfCall && Const.CONSTRUCTOR_NAME.equals(getMethodName())) { sawSelfCallInConstructor = true; if ((seen == Const.IFNULL || seen == Const.IFNONNULL) && stack.getStackDepth() > 0) { OpcodeStack.Item item = stack.getStackItem(0); XField f = item.getXField(); if ((seen == Const.IF_ACMPEQ || seen == Const.IF_ACMPNE) && stack.getStackDepth() >= 2) { OpcodeStack.Item item0 = stack.getStackItem(0); OpcodeStack.Item item1 = stack.getStackItem(1);
if (seen == Const.INVOKEVIRTUAL && "isInstance".equals(getNameConstantOperand()) && "java/lang/Class".equals(getClassConstantOperand())) { OpcodeStack.Item item = stack.getStackItem(0); if (item.getRegisterNumber() == 1) { sawInstanceofCheck = true; OpcodeStack.Item item = stack.getStackItem(0); if (item.getRegisterNumber() == 1) { sawInstanceofCheck = true; OpcodeStack.Item item0 = stack.getStackItem(0); OpcodeStack.Item item1 = stack.getStackItem(1); if (item1.getRegisterNumber() + item0.getRegisterNumber() == 1) { sawInstanceofCheck = true; OpcodeStack.Item item = stack.getStackItem(0); if (item.getRegisterNumber() == 1) { if (getSizeOfSurroundingTryBlock(getPC()) == Integer.MAX_VALUE) { accumulator.accumulateBug(new BugInstance(DumbMethods.this, "BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS",
if (seen == Const.GETFIELD && stack.getStackDepth() > 0) { OpcodeStack.Item top = stack.getStackItem(0); if (top.getRegisterNumber() == 0) { potentiallyDeadFields.remove(getXFieldOperand()); else if (seen == Const.PUTFIELD && stack.getStackDepth() >= 2) { OpcodeStack.Item obj = stack.getStackItem(1); if (obj.getRegisterNumber() == 0) { XField f = getXFieldOperand(); if (potentiallyDeadFields.contains(f) && potentiallyDeadFieldsFromBeforeFallthrough.contains(f)) {
int callArgs = getNumberArguments(md.getSignature()); for (int i = 0; i < callArgs; i++) { Item item = getStack().getStackItem(callArgs - 1 - i); int param = item.getRegisterNumber(); if (param >= 0 && param < argNums.length && argNums[param] != -1) { List<MethodParameter> list = passedParameters[argNums[param]];
case Const.DCMPG: case Const.DCMPL: if (stack.getStackDepth() >= 2) { OpcodeStack.Item first = stack.getStackItem(0); OpcodeStack.Item second = stack.getStackItem(1); if (first.getRegisterNumber() == second.getRegisterNumber() && first.getRegisterNumber() != -1) { break;
if ((name.startsWith("set") || name.startsWith("update")) || sig.endsWith(")V")) { Item invokedOn = stack.getItemMethodInvokedOn(this); if (invokedOn.isInitialParameter() && invokedOn.getRegisterNumber() == 0) { updates++; OpcodeStack.Item rv = stack.getStackItem(0); if (rv.isNull()) { break; case Const.PUTFIELD: { OpcodeStack.Item rv = stack.getStackItem(1); if (rv.getRegisterNumber() == 0 && rv.isInitialParameter()) { if (inferredMethod != null) { inferredMethod.addReferencedField(this);
&& stack.getStackDepth() >= 2 && (seen == Const.IF_ICMPGE || seen == Const.IF_ICMPGT || seen == Const.IF_ICMPLT || seen == Const.IF_ICMPLE || seen == Const.IF_ICMPNE || seen == Const.IF_ICMPEQ)) { OpcodeStack.Item item0 = stack.getStackItem(0); OpcodeStack.Item item1 = stack.getStackItem(1); int r0 = item0.getRegisterNumber(); int r1 = item1.getRegisterNumber(); int rMin = Math.min(r0, r1); int rMax = Math.max(r0, r1);
if (m != null && !m.isPrivate() && !m.isFinal()) { int args = PreorderVisitor.getNumberArguments(m.getSignature()); OpcodeStack.Item item = stack.getStackItem(args); if (item.getRegisterNumber() == 0) { try { Set<XMethod> targets = Hierarchy2.resolveVirtualMethodCallTargets(m, false, false); if (invokedOn.getRegisterNumber() == 0 && !classOperand.equals(getClassName())) { sawInitializeSuper = true; XMethod invoked = getXMethodOperand(); fieldSummary.addWrittenOutsideOfConstructor(fieldOperand); } else if (seen == Const.PUTFIELD) { OpcodeStack.Item addr = stack.getStackItem(1); if (addr.getRegisterNumber() != 0 || !Const.CONSTRUCTOR_NAME.equals(getMethodName())) { fieldSummary.addWrittenOutsideOfConstructor(fieldOperand); fieldSummary.addWrittenOutsideOfConstructor(fieldOperand); OpcodeStack.Item top = stack.getStackItem(0); fieldSummary.mergeSummary(fieldOperand, top);
OpcodeStack.Item left = stack.getStackItem(1); OpcodeStack.Item right = stack.getStackItem(0); if (badUseOfCompareResult(left, right)) { XMethod returnValueOf = left.getReturnValueOf(); OpcodeStack.Item invokedOn = stack.getStackItem(arguments); if (invokedOn.isNewlyAllocated() && (!Const.CONSTRUCTOR_NAME.equals(getMethodName()) || invokedOn.getRegisterNumber() != 0)) { for (int i = arguments + 1; i < stack.getStackDepth(); i++) { OpcodeStack.Item item = stack.getStackItem(i); if (item.isNewlyAllocated() && item.getSignature().equals(invokedOn.getSignature())) {
@Override public void sawOpcode(int seen) { if (!allowedFields.isEmpty() && seen == Const.PUTFIELD) { Item objItem = getStack().getStackItem(1); if (objItem.getRegisterNumber() == 0) { if (allowedFields.contains(getFieldDescriptorOperand())) { Item valueItem = getStack().getStackItem(0); if (!isNew(valueItem) && !valueItem.isNull()) { allowedFields.remove(getFieldDescriptorOperand()); Item exceptionItem = getStack().getStackItem(0); if(!finallyExceptionRegisters.remove(exceptionItem.getRegisterNumber())) { uselessVoidCandidate = false; try {
&& stack.getStackDepth() >= 2) { Item left = stack.getStackItem(1); Item right = stack.getStackItem(0); if (left.getRegisterNumber() + right.getRegisterNumber() == 1) { sawCompare = true; && stack.getStackDepth() >= 2) { Item left = stack.getStackItem(1); XMethod leftM = left.getReturnValueOf(); Item right = stack.getStackItem(0); if (seen == Const.INSTANCEOF && stack.getStackDepth() > 0 && stack.getStackItem(0).getRegisterNumber() == 1) { ClassDescriptor instanceOfCheck = getClassDescriptorOperand(); if (instanceOfCheck.equals(getClassDescriptor())) { if (seen == Const.CHECKCAST && stack.getStackDepth() > 0 && stack.getStackItem(0).getRegisterNumber() == 1) { ClassDescriptor castTo = getClassDescriptorOperand(); if (castTo.equals(getClassDescriptor())) {
return; if(getStack().getStackItem(getNumberArguments(getSigConstantOperand())).getRegisterNumber() != 0) {
&& getClassConstantOperand().contains("Set") || (seen == Const.INVOKEVIRTUAL || seen == Const.INVOKEINTERFACE) && "addAll".equals(getNameConstantOperand()) && "(Ljava/util/Collection;)Z".equals(getSigConstantOperand())) { OpcodeStack.Item top = stack.getStackItem(0); XMethod returnValueOf = top.getReturnValueOf(); if (returnValueOf != null && "entrySet".equals(returnValueOf.getName())) { && stack.getStackDepth() > 0) { OpcodeStack.Item item0 = stack.getStackItem(0); if (item0.getSignature().charAt(0) == '[') { bugReporter.reportBug(new BugInstance(this, "DMI_INVOKING_HASHCODE_ON_ARRAY", NORMAL_PRIORITY) if (stack.getStackDepth() > 1) { OpcodeStack.Item item0 = stack.getStackItem(0); OpcodeStack.Item item1 = stack.getStackItem(1); imul_constant = adjustMultiplier(item0.getConstant(), imul_constant); if (seen == Const.IADD && (getNextOpcode() == Const.ISHL || getNextOpcode() == Const.LSHL) && stack.getStackDepth() >=3) { OpcodeStack.Item l = stack.getStackItem(2); OpcodeStack.Item v = stack.getStackItem(1); int reg = item.getRegisterNumber(); Collection<BugAnnotation> as = new ArrayList<>(); XField field = item.getXField();
if (opcode == Const.PUTFIELD) { XField f = getXFieldOperand(); OpcodeStack.Item item = stack.getStackItem(1); if (item.getRegisterNumber() != 0) { return; return; OpcodeStack.Item item = stack.getStackItem(0); if (item.getRegisterNumber() != 0) { return;
OpcodeStack.Item left = stack.getStackItem(1); OpcodeStack.Item right = stack.getStackItem(0); checkForCompatibleLongComparison(left, right); if (stack.getStackDepth() >= 2) { switch (seen) { case Const.IF_ICMPEQ: if (seen == Const.IFLT && stack.getStackDepth() > 0 && stack.getStackItem(0).getSpecialKind() == OpcodeStack.Item.SIGNED_BYTE) { sawCheckForNonNegativeSignedByte = getPC(); if(stack.getStackDepth() > 0 && stack.getStackItem(0).getSpecialKind() == OpcodeStack.Item.NON_NEGATIVE) { OpcodeStack.Item top = stack.getStackItem(0); if (top.getRegisterNumber() != -1 && getMaxPC() > getNextPC() + 6) { if (false) { for(int i = -2; i <= 0; i++) { && item.getRegisterNumber() == 0 ? NORMAL_PRIORITY : LOW_PRIORITY).addClassAndMethod(this) .addCalledMethod(this), this); || "(Ljava/lang/ThreadGroup;Ljava/lang/String;)V".equals(sig)) { OpcodeStack.Item invokedOn = stack.getItemMethodInvokedOn(this); if (!Const.CONSTRUCTOR_NAME.equals(getMethodName()) || invokedOn.getRegisterNumber() != 0) { accumulator.accumulateBug( new BugInstance(this, "DM_USELESS_THREAD", LOW_PRIORITY).addClassAndMethod(this), this);
private MethodCall getMethodCall(MethodDescriptor methodDescriptorOperand) { Item objItem = getStack().getStackItem(getNumberArguments(methodDescriptorOperand.getSignature())); if (isNew(objItem)) { return new MethodCall(methodDescriptorOperand, TARGET_NEW); } if (objItem.getRegisterNumber() == 0 && !getMethod().isStatic()) { return new MethodCall(methodDescriptorOperand, constructor ? TARGET_NEW : TARGET_THIS); } XField xField = objItem.getXField(); if (xField != null) { if (classInit && xField.isStatic() && xField.getClassDescriptor().getClassName().equals(getClassName())) { return new MethodCall(methodDescriptorOperand, TARGET_NEW); } if (!getMethodDescriptor().isStatic() && objItem.getFieldLoadedFromRegister() == 0 && allowedFields.contains(xField.getFieldDescriptor())) { fieldsModifyingMethods.add(getMethodDescriptor()); return new MethodCall(methodDescriptorOperand, xField.getFieldDescriptor()); } } return new MethodCall(methodDescriptorOperand, TARGET_OTHER); }
OpcodeStack.Item top = stack.getStackItem(0); OpcodeStack.Item next = stack.getStackItem(1); if (stack.getStackDepth() >= 4 && getNextOpcode() == Const.PUTFIELD) { OpcodeStack.Item third = stack.getStackItem(2); OpcodeStack.Item fourth = stack.getStackItem(3); XField f2 = third.getXField(); int registerNumber2 = fourth.getRegisterNumber(); if (f2 != null && f2.equals(getXFieldOperand()) && registerNumber2 >= 0 && registerNumber2 == third.getFieldLoadedFromRegister() int registerNumber = next.getRegisterNumber(); if (f != null && f.equals(getXFieldOperand()) && registerNumber >= 0 && registerNumber == top.getFieldLoadedFromRegister() && (top.getPC() == -1 || top.getPC() > lastMethodCall)) {
if (!getMethod().isStatic() && Const.CONSTRUCTOR_NAME.equals(getNameConstantOperand()) && isSelfOperation()) { OpcodeStack.Item invokedOn = stack.getItemMethodInvokedOn(this); if (invokedOn.isInitialParameter() && invokedOn.getRegisterNumber() == 0) { secondaryConstructor = true; return; OpcodeStack.Item left = stack.getStackItem(1); if (left.isInitialParameter() && left.getRegisterNumber() == 0 && isSelfOperation()) { XField f = getXFieldOperand(); if (f == null) {