- Better filter.
This commit is contained in:
		
							parent
							
								
									36ccfd776a
								
							
						
					
					
						commit
						e2aca6f3ce
					
				@ -421,10 +421,15 @@ isClaimlabelUsed (const System sys, const Term label)
 | 
			
		||||
 | 
			
		||||
//! Generate a fresh claim label
 | 
			
		||||
Term
 | 
			
		||||
generateFreshClaimlabel (const System sys, const Role role, const Term claim)
 | 
			
		||||
generateFreshClaimlabel (const System sys, const Protocol protocol,
 | 
			
		||||
			 const Role role, const Term claim)
 | 
			
		||||
{
 | 
			
		||||
  Term label;
 | 
			
		||||
 | 
			
		||||
  /* Simply use the role as a prefix */
 | 
			
		||||
  return freshTermPrefix (role->nameterm);
 | 
			
		||||
  label = freshTermPrefix (role->nameterm);
 | 
			
		||||
  label = makeTermTuple (protocol->nameterm, label);
 | 
			
		||||
  return label;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//! Create a claim and add it to the claims list, and add the role event.
 | 
			
		||||
@ -435,6 +440,14 @@ claimCreate (const System sys, const Protocol protocol, const Role role,
 | 
			
		||||
  Claimlist cl;
 | 
			
		||||
  Term labeltuple;
 | 
			
		||||
 | 
			
		||||
  /* generate full unique label */
 | 
			
		||||
  /* is the label empty or used? */
 | 
			
		||||
  if (label == NULL || isClaimlabelUsed (sys, label))
 | 
			
		||||
    {
 | 
			
		||||
      /* simply generate a fresh one */
 | 
			
		||||
      label = generateFreshClaimlabel (sys, protocol, role, claim);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (switches.filterProtocol != NULL)
 | 
			
		||||
    {
 | 
			
		||||
      // only this protocol
 | 
			
		||||
@ -447,27 +460,26 @@ claimCreate (const System sys, const Protocol protocol, const Role role,
 | 
			
		||||
      // and maybe also a specific label?
 | 
			
		||||
      if (switches.filterLabel != NULL)
 | 
			
		||||
	{
 | 
			
		||||
	  Term t;
 | 
			
		||||
 | 
			
		||||
	  t = label;
 | 
			
		||||
	  while (isTermTuple (t))
 | 
			
		||||
	  if (label == NULL)
 | 
			
		||||
	    {
 | 
			
		||||
	      t = TermOp2 (t);
 | 
			
		||||
	    }
 | 
			
		||||
	  if (strcmp (switches.filterLabel, TermSymb (t)->text) != 0)
 | 
			
		||||
	    {
 | 
			
		||||
	      // not this label; return
 | 
			
		||||
	      return NULL;
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
	  else
 | 
			
		||||
	    {
 | 
			
		||||
	      Term t;
 | 
			
		||||
 | 
			
		||||
  /* generate full unique label */
 | 
			
		||||
  /* is the label empty or used? */
 | 
			
		||||
  if (label == NULL || isClaimlabelUsed (sys, label))
 | 
			
		||||
    {
 | 
			
		||||
      /* simply generate a fresh one */
 | 
			
		||||
      label = generateFreshClaimlabel (sys, role, claim);
 | 
			
		||||
	      t = label;
 | 
			
		||||
	      while (isTermTuple (t))
 | 
			
		||||
		{
 | 
			
		||||
		  t = TermOp2 (t);
 | 
			
		||||
		}
 | 
			
		||||
	      if (strcmp (switches.filterLabel, TermSymb (t)->text) != 0)
 | 
			
		||||
		{
 | 
			
		||||
		  // not this label; return
 | 
			
		||||
		  return NULL;
 | 
			
		||||
		}
 | 
			
		||||
	    }
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  // Assert: label is unique, add claimlist info
 | 
			
		||||
@ -710,6 +722,7 @@ commEvent (int event, Tac tc)
 | 
			
		||||
		    ("Claim label is not unique at line %i, generating fresh label.",
 | 
			
		||||
		     tc->lineno);
 | 
			
		||||
		}
 | 
			
		||||
	      // the reported new label will be generated later in claimCreate()
 | 
			
		||||
	    }
 | 
			
		||||
 | 
			
		||||
	  if (!isTermEqual (fromrole, thisRole->nameterm))
 | 
			
		||||
 | 
			
		||||
@ -495,12 +495,12 @@ switcher (const int process, int index, int commandline)
 | 
			
		||||
	}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  if (detect (' ', "claim", 1))
 | 
			
		||||
  if (detect (' ', "filter", 1))
 | 
			
		||||
    {
 | 
			
		||||
      if (!process)
 | 
			
		||||
	{
 | 
			
		||||
	  helptext ("--claim=<protocol>[,<label>]",
 | 
			
		||||
		    "check only a certain claim");
 | 
			
		||||
	  helptext ("--filter=<protocol>[,<label>]",
 | 
			
		||||
		    "check only certain claims");
 | 
			
		||||
	}
 | 
			
		||||
      else
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
@ -1,3 +1,5 @@
 | 
			
		||||
- There is something weird when automatically generating claim labels
 | 
			
		||||
  and trying to filter on them (try eg duplicates)
 | 
			
		||||
- --check is slightly f***ed up because there is no good semantics for
 | 
			
		||||
  the --disable intruder check. As a result, it is now too strict can
 | 
			
		||||
  cause correct protocols to fail. Fix.
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user