[Soot-list] soot-classpath troubles

Dan Grossman djg at cs.washington.edu
Tue Aug 15 13:50:49 EDT 2006


Thanks, Patrick.

We hadn't tried building with the repository-versions yet, which would 
have indicated this was a fixed bug.

We'll backport the fix.

--Dan

Patrick Lam wrote:
> Dan Grossman wrote:
>> So I imagine somebody somewhere didn't convert slashes to dots eagerly
>> enough.  I can change RefType.v to replace slashes with dots, but is
>> that the Right Thing To Do?
> 
> Hi Dan,
> 
> It looks like a Coffi bug to me.  The Java VM spec says that class names
> in class files are slashified instead of dotified, and
> soot.coffi.CFG.processCPEntry doesn't do any conversion.  It sounds to
> me like RefType ought to assume that its input is dotified, not slashified.
> 
> It's strange that this bug hasn't been triggered or reported before, though.
> 
> Sounds like this problem might not happen if you converted to jimple
> first and then parsed from there.  Actually, you'd only need to jimplify
> the reference to java.io.BufferedInputStream and see if that jimple file
> is correct, and then parse the whole program with --src-prec=jimple.
> 
> ...
> 
> Aha.  Ondrej has already committed a fix to this:
> 
> r2446 | olhota | 2006-06-22 09:31:31 -0400 (Thu, 22 Jun 2006) | 4 lines
> 
> Bug fix: When reading classconstants in Java 5, Coffi would create RefTypes
> containing slashes instead of dots. Fix contributed by Nicolae Vintila.
> 
> It's exactly the same fix I just came up with, so it should be fine.
> Here's the diff:
> 
> Index: coffi/CFG.java
> ===================================================================
> --- coffi/CFG.java      (revision 2364)
> +++ coffi/CFG.java      (working copy)
> @@ -2717,6 +2717,7 @@
>          else if (c instanceof CONSTANT_Class_info){
>              CONSTANT_Class_info info = (CONSTANT_Class_info)c;
>              String name = ((CONSTANT_Utf8_info)
> (constant_pool[info.name_index])).convert();
> +            name = name.replace('/', '.')
>              if (name.charAt(0) == '['){
>                  int dim = 0;
>                  while (name.charAt(dim) == '['){
> 
> pat


More information about the Soot-list mailing list