@Override public void visitClassContext(ClassContext classContext) { if (appletClass == null) { return; } JavaClass cls = classContext.getJavaClass(); try { if (cls.instanceOf(appletClass)) { cls.accept(this); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } }
if (!"java.io.Serializable".equals(interfaceName)) { JavaClass inf = Repository.lookupClass(interfaceName); if (superObj.instanceOf(inf)) { redundantInfNames.add(inf.getClassName());
if (mtClass.isClass() ? cls.instanceOf(mtClass) : cls.implementationOf(mtClass)) { mtClassName = mtClass.getClassName(); super.visitClassContext(classContext);
try { JavaClass bundleClass = Repository.lookupClass("org.osgi.framework.BundleActivator"); if (getThisClass().instanceOf(bundleClass)) { priority++; String dottedClass = DeepSubtypeAnalysis.getComponentClass(fieldInfo.getSignature()); JavaClass fieldClass = Repository.lookupClass(dottedClass); if (fieldClass != null && fieldClass.instanceOf(bundleClass)) {
/** * Equivalent to runtime "instanceof" operator. * @return true, if clazz is an instance of super_class * @throws ClassNotFoundException if any superclasses or superinterfaces * of clazz can't be found */ public static boolean instanceOf( final JavaClass clazz, final JavaClass super_class ) throws ClassNotFoundException { return clazz.instanceOf(super_class); }
/** * Equivalent to runtime "instanceof" operator. * @return true, if clazz is an instance of super_class */ public static boolean instanceOf(JavaClass clazz, JavaClass super_class) { return clazz.instanceOf(super_class); }
public boolean isThrowable() { try { JavaClass javaClass = toJavaClass(); if (javaClass == null) { return false; } return javaClass.instanceOf(THROWABLE); } catch (ClassNotFoundException e) { throw new IllegalStateException(e); } } }
@Nullable private PSCUserValue isSizedSource(OpcodeStack.Item itm) { try { String sig = itm.getSignature(); JavaClass cls = Repository.lookupClass(sig.substring(1, sig.length() - 1)); if (cls.instanceOf(collectionClass)) { return new PSCUserValue(true); } } catch (ClassNotFoundException e) { bugReporter.reportMissingClass(e); } return null; }
@Nullable private PSCUserValue isSizedSource(OpcodeStack.Item itm) { try { String sig = itm.getSignature(); JavaClass cls = Repository.lookupClass(sig.substring(1, sig.length() - 1)); if (cls.instanceOf(collectionClass)) { return new PSCUserValue(true); } } catch (ClassNotFoundException e) { bugReporter.reportMissingClass(e); } return null; }
/** @return true if given Item is throwable */ public boolean checkThrowable(Item stackItem) { try { JavaClass typeOfStack = stackItem.getJavaClass(); if (typeOfStack == null) { // means primitive or array return false; } return typeOfStack.instanceOf(THROWABLE); } catch (ClassNotFoundException e) { AnalysisContext.reportMissingClass(e); return false; } } }
private boolean isMap(Field obj) { try { String sig = obj.getSignature(); if (!sig.startsWith(Values.SIG_QUALIFIED_CLASS_PREFIX)) { return false; } sig = SignatureUtils.trimSignature(sig); JavaClass fieldClass = Repository.lookupClass(sig); return fieldClass.implementationOf(mapInterface) && !fieldClass.instanceOf(propertiesClass); } catch (ClassNotFoundException e) { return false; } }
private boolean isMap(Field obj) { try { String sig = obj.getSignature(); if (!sig.startsWith(Values.SIG_QUALIFIED_CLASS_PREFIX)) { return false; } sig = SignatureUtils.trimSignature(sig); JavaClass fieldClass = Repository.lookupClass(sig); return fieldClass.implementationOf(mapInterface) && !fieldClass.instanceOf(propertiesClass); } catch (ClassNotFoundException e) { return false; } }
@Override public void visitClassContext(ClassContext classContext) { if (appletClass == null) { return; } JavaClass cls = classContext.getJavaClass(); try { if (cls.instanceOf(appletClass)) { cls.accept(this); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } }
private void sawOpcodeAfterNothing(int seen) throws ClassNotFoundException { if ((seen == IFNULL) && (stack.getStackDepth() >= 1)) { OpcodeStack.Item itm = stack.getStackItem(0); lastNullCheckedReg = itm.getRegisterNumber(); state = lastNullCheckedReg >= 0 ? State.SEEN_IFNULL : State.SEEN_NOTHING; } else { lastNullCheckedReg = -1; } if ((bugPC >= 0) && ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) && "addSuppressed".equals(getNameConstantOperand()) && SignatureBuilder.SIG_THROWABLE_TO_VOID.equals(getSigConstantOperand()) && Repository.lookupClass(getClassConstantOperand()).instanceOf(throwableClass)) { closePC = -1; bugPC = -1; suppressedPC = getPC(); } }
private void sawOpcodeAfterNothing(int seen) throws ClassNotFoundException { if ((seen == Const.IFNULL) && (stack.getStackDepth() >= 1)) { OpcodeStack.Item itm = stack.getStackItem(0); lastNullCheckedReg = itm.getRegisterNumber(); state = lastNullCheckedReg >= 0 ? State.SEEN_IFNULL : State.SEEN_NOTHING; } else { lastNullCheckedReg = -1; } if ((bugPC >= 0) && ((seen == Const.INVOKEVIRTUAL) || (seen == Const.INVOKEINTERFACE)) && "addSuppressed".equals(getNameConstantOperand()) && SignatureBuilder.SIG_THROWABLE_TO_VOID.equals(getSigConstantOperand()) && Repository.lookupClass(getClassConstantOperand()).instanceOf(throwableClass)) { closePC = -1; bugPC = -1; suppressedPC = getPC(); } }
private void calendarBeforeAfterSilliness() { if (stack.getStackDepth() > 1) { OpcodeStack.Item item = stack.getStackItem(0); String itemSig = item.getSignature(); // Rule out java.lang.Object as mergeJumps can throw away type info // (BUG) if (!Values.SIG_JAVA_LANG_OBJECT.equals(itemSig) && !"Ljava/util/Calendar;".equals(itemSig) && !"Ljava/util/GregorianCalendar;".equals(itemSig)) { try { JavaClass cls = Repository.lookupClass(SignatureUtils.stripSignature(itemSig)); if (!cls.instanceOf(calendarClass)) { bugReporter.reportBug(new BugInstance(this, BugType.SPP_INVALID_CALENDAR_COMPARE.name(), NORMAL_PRIORITY).addClass(this).addMethod(this) .addSourceLine(this)); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } } } }
private void calendarBeforeAfterSilliness() { if (stack.getStackDepth() > 1) { OpcodeStack.Item item = stack.getStackItem(0); String itemSig = item.getSignature(); // Rule out java.lang.Object as mergeJumps can throw away type info // (BUG) if (!Values.SIG_JAVA_LANG_OBJECT.equals(itemSig) && !"Ljava/util/Calendar;".equals(itemSig) && !"Ljava/util/GregorianCalendar;".equals(itemSig)) { try { JavaClass cls = Repository.lookupClass(SignatureUtils.stripSignature(itemSig)); if (!cls.instanceOf(calendarClass)) { bugReporter.reportBug(new BugInstance(this, BugType.SPP_INVALID_CALENDAR_COMPARE.name(), NORMAL_PRIORITY).addClass(this).addMethod(this) .addSourceLine(this)); } } catch (ClassNotFoundException cnfe) { bugReporter.reportMissingClass(cnfe); } } } }
private void checkForProblemsWithLoggerSingleArgumentMethod() throws ClassNotFoundException { final JavaClass clazz = stack.getStackItem(0).getJavaClass(); if ((clazz != null) && clazz.instanceOf(throwableClass)) { bugReporter.reportBug(new BugInstance(this, BugType.LO_LOGGER_LOST_EXCEPTION_STACK_TRACE.name(), NORMAL_PRIORITY).addClass(this).addMethod(this) .addSourceLine(this)); } }
private void checkForProblemsWithLoggerSingleArgumentMethod() throws ClassNotFoundException { final JavaClass clazz = stack.getStackItem(0).getJavaClass(); if ((clazz != null) && clazz.instanceOf(throwableClass)) { bugReporter.reportBug(new BugInstance(this, BugType.LO_LOGGER_LOST_EXCEPTION_STACK_TRACE.name(), NORMAL_PRIORITY).addClass(this).addMethod(this) .addSourceLine(this)); } }
@Override public void sawOpcode(int seen) { try { if (seen == INVOKEVIRTUAL) { QMethod m = new QMethod(getNameConstantOperand(), getSigConstantOperand()); if (SETACCESSIBLE.equals(m)) { JavaClass clz = Repository.lookupClass(getClassConstantOperand()); if (clz.instanceOf(ACCESSIBLE_OBJECT_CLASS)) { bugReporter.reportBug( new BugInstance(this, BugType.RFI_SET_ACCESSIBLE.name(), NORMAL_PRIORITY).addClass(this).addMethod(this).addSourceLine(this)); } } } else if (seen == INVOKESTATIC) { FQMethod m = new FQMethod(getClassConstantOperand(), getNameConstantOperand(), getSigConstantOperand()); if (SETACCESSIBLE_ARRAY.equals(m)) { bugReporter.reportBug( new BugInstance(this, BugType.RFI_SET_ACCESSIBLE.name(), NORMAL_PRIORITY).addClass(this).addMethod(this).addSourceLine(this)); } } } catch (ClassNotFoundException e) { bugReporter.reportMissingClass(e); } } }