Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright (C) 2015 The Pennsylvania State University and the University of Wisconsin
   * Systems and Internet Infrastructure Security Laboratory
   *
   * Author: Damien Octeau
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  *
  * http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package edu.psu.cse.siis.coal.arguments;
 
 import java.util.Set;
 
 import soot.Local;
 import soot.Unit;
 import soot.Value;
An argument value analysis for string types.
 
 public class StringValueAnalysis implements ArgumentValueAnalysis {
   private static final String TOP_VALUE = .;

  
Initializes the string argument value analysis. This should be called before using the analysis.
 
   public static void initialize() {
     // CCExprVisitor.verbose_level = 20;
     // CCVisitor.verbose_level = 20;
     // DBG.verbose_level = 20;
     ConstraintCollector.globalCollection(new ConstraintCollector.CCModelInterface() {
       public boolean isExcludedClass(String class_name) {
         return false;
       }
     });
   }
 
   @Override
   public Set<ObjectcomputeArgumentValues(Argument argumentUnit callSite) {
     if (argument.getArgnum() == null) {
       return null;
     }
     if (AnalysisParameters.v().useShimple()) {
       return Collections.singleton((Object);
     } else {
       Stmt stmt = (StmtcallSite;
       if (!stmt.containsInvokeExpr()) {
         throw new RuntimeException("Statement " + stmt + " does not contain an invoke expression");
       }
       Value value = stmt.getInvokeExpr().getArg(argument.getArgnum()[0]);
 
       return findStringConstantValues(callSitevalue);
     }
   }
 
   @Override
   public Set<ObjectcomputeInlineArgumentValues(String[] inlineValues) {
     return new HashSet<Object>(Arrays.asList(inlineValues));
   }

  
Returns the string values of a variable used at a given statement.

Parameters:
start The statement that uses the variable whose values should be determined.
value The value or variable that should be determined.
Returns:
The set of possible values.
 
   static Set<ObjectfindStringConstantValues(Unit startValue value) {
     if (value instanceof StringConstant) {
       return Collections.singleton((Object) ((StringConstantvalue)..intern());
     } else if (value instanceof NullConstant) {
       return Collections.singleton((Object"<NULL>");
     } else if (value instanceof Local) {
       Local local = (Localvalue;
 
       ConstraintCollector constraintCollector =
           new ConstraintCollector(new ExceptionalUnitGraph(AnalysisParameters.v().getIcfg()
               .getMethodOf(start).getActiveBody()));
       LanguageConstraints.Box lcb = constraintCollector.getConstraintOfAt(local, (Stmtstart);
      RecursiveDAGSolverVisitorLC dagvlc =
          new RecursiveDAGSolverVisitorLC(5, null,
                @Override
                public Set<ObjectgetMethodReturnValues(Call call) {
                  return MethodReturnValueManager.v().getMethodReturnValues(call);
                }
              });
      if (dagvlc.solve(lcb)) {
        // boolean flag = false;
        // if (dagvlc.result.size() == 0 || flag == true) {
        // System.out.println("ID: " + lcb.uid);
        // // int dbg = 10;
        // // while (dbg == 10) {
        // System.out.println("Returning " + dagvlc.result);
        // System.out.println("Returning.. " + lcb);
        // dagvlc.solve(lcb);
        // System.out.println("done");
        // // }
        // }
        // System.out.println("Returning " + dagvlc.result);
        return new HashSet<Object>(dagvlc.result);
      } else {
        return Collections.singleton((Object);
      }
    } else {
      return Collections.singleton((Object);
    }
  }
  public Object getTopValue() {
    return ;
  }
New to GrepCode? Check out our FAQ X