public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { var newExpr = VisitElement(memberExpressionAst.Expression); var newMember = VisitElement(memberExpressionAst.Member); return(new MemberExpressionAst(memberExpressionAst.Extent, newExpr, newMember, memberExpressionAst.Static)); }
public static void MeasurePropertyInjection(string ScriptBlock) { Token[] token; ParseError[] error; ScriptBlockAst ScriptBlockAst = Parser.ParseInput(ScriptBlock, out token, out error); Func <Ast, bool> predicate = delegate(Ast ast) { var derpVar = new VariableExpressionAst(ast.Extent, "Derp", splatted: false); var derpVar2 = new StringConstantExpressionAst(ast.Extent, "Derpvr2", StringConstantType.BareWord); InvokeMemberExpressionAst methodAst = new InvokeMemberExpressionAst(ast.Extent, derpVar, derpVar2, Enumerable.Empty <ExpressionAst>(), @static: false); var ast2 = ast.Copy(); var derpVar3 = new VariableExpressionAst(ast2.Extent, "Derp3", splatted: false); var derpVar4 = new StringConstantExpressionAst(ast2.Extent, "Derpvr4", StringConstantType.BareWord); MemberExpressionAst targetAst = new MemberExpressionAst(ast2.Extent, derpVar3, derpVar4, @static: false); if (targetAst != null && methodAst == null) { if (!(targetAst.Member is ConstantExpressionAst)) { return(true); } } return(false); }; var foundNode = ScriptBlockAst.Find(predicate, true); if (foundNode != null) { Console.WriteLine("[+] Possible injection vulnerability found"); Console.WriteLine(String.Format(@"Possible property access injection via dynamic member access. Untrusted input can cause arbitrary static properties to be accessed: RuleName = InjectionRisk.StaticPropertyInjection Severity = Warning", foundNode.Extent)); } }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { if (!_targetVersions.Contains(s_v3)) { return(AstVisitAction.Continue); } if (!(memberExpressionAst.Member is StringConstantExpressionAst)) { string message = string.Format( CultureInfo.CurrentCulture, Strings.UseCompatibleSyntaxError, "dynamic member invocation", memberExpressionAst.Extent.Text, "3"); _diagnosticAccumulator.Add(new DiagnosticRecord( message, memberExpressionAst.Extent, _rule.GetName(), _rule.Severity, _analyzedFilePath )); } return(AstVisitAction.Continue); }
private ExpressionAst CreateClosureAccess(IScriptExtent extent, string name) { MaybeProcessMember(name, out int index, out string groupName); var closureExpr = new IndexExpressionAst( extent, new VariableExpressionAst(extent, "args", false), new ConstantExpressionAst(extent, 0)); var groupExpr = new MemberExpressionAst( extent, closureExpr, new StringConstantExpressionAst(extent, groupName, StringConstantType.BareWord), @static: false); var elementAccess = new IndexExpressionAst( extent, groupExpr, new ConstantExpressionAst(extent, index)); if (groupName != nameof(Closure.Inherits)) { return(elementAccess); } return(new MemberExpressionAst( extent, elementAccess, new StringConstantExpressionAst(extent, nameof(PSVariable.Value), StringConstantType.BareWord), @static: false)); }
public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { var expression = VisitAst(memberExpressionAst.Expression); var member = VisitAst(memberExpressionAst.Member); return(new MemberExpressionAst(memberExpressionAst.Extent, expression, member, memberExpressionAst.Static)); }
public void MemberAccess() { MemberExpressionAst memberExpressionAst = ParseInput("[System.Int32]::MaxValue") .EndBlock .Statements[0] .PipelineElements[0] .Expression; }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { if (!ValidateExtend(symbolRef.ScriptRegion.Text, memberExpressionAst.Member.ToString(), memberExpressionAst)) { return(AstVisitAction.Continue); } return(AstVisitAction.StopVisit); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) //confirmed { if (memberExpressionAst.ToString().Contains(symbolRef.ScriptRegion.Text)) { ValidateExtend(symbolRef.ScriptRegion.Text, memberExpressionAst.Member.ToString(), memberExpressionAst); } return(base.VisitMemberExpression(memberExpressionAst)); }
public virtual ExpressionAst VisitMemberExpression(MemberExpressionAst memberExpressionAst) { return(new MemberExpressionAst( memberExpressionAst.Extent, memberExpressionAst.Expression.Rewrite(this), memberExpressionAst.Member.Rewrite(this), memberExpressionAst.Static)); }
public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { var expression = Visit(memberExpressionAst.Expression); var fieldRef = new CodePropertyReferenceExpression(expression as CodeExpression, memberExpressionAst.Member.ToString()); return(fieldRef); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { var expression = memberExpressionAst.Expression; Type type; object obj; if (expression is TypeExpressionAst) { obj = null; type = ((TypeExpressionAst)expression).TypeName.GetReflectionType(); } else { obj = EvaluateAst(expression); if (obj is PSObject) { obj = ((PSObject)obj).BaseObject; } type = obj.GetType(); } if (memberExpressionAst.Member is StringConstantExpressionAst) { object result = null; var name = (memberExpressionAst.Member as StringConstantExpressionAst).Value; BindingFlags bindingFlags = BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static; // TODO: Single() is a problem for overloaded methods var memberInfo = type.GetMember(name, bindingFlags).Single(); if (memberInfo != null) { switch (memberInfo.MemberType) { case MemberTypes.Field: result = ((FieldInfo)memberInfo).GetValue(obj); break; case MemberTypes.Property: result = ((PropertyInfo)memberInfo).GetValue(obj, null); break; default: throw new NotImplementedException(this.ToString()); } } _pipelineCommandRuntime.WriteObject(result); return(AstVisitAction.SkipChildren); } throw new NotImplementedException(this.ToString()); }
public static MemberExpressionAst Update( this MemberExpressionAst ast, ExpressionAst expression = null, CommandElementAst member = null, bool? @static = null) { return(new MemberExpressionAst( ast.Extent, expression?.Clone() ?? ast.Expression.Clone(), member?.Clone() ?? ast.Member.Clone(), @static ?? ast.Static)); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { var expression = VisitSyntaxNode(memberExpressionAst.Expression); var member = VisitSyntaxNode(memberExpressionAst.Member); if (member is StringConstant) { var str = member as StringConstant; _currentNode = new MemberAccess(expression, str.Value); } return(AstVisitAction.SkipChildren); }
public override object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { VisitElement(memberExpressionAst.Expression); if (memberExpressionAst.Static) { script_.Write("::"); } else { script_.Write("."); } VisitElement(memberExpressionAst.Member); return(memberExpressionAst); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { if (!TargetsNonPS7()) { return(AstVisitAction.Continue); } if (memberExpressionAst.NullConditional) { AddDiagnostic( memberExpressionAst, "null-conditional member access", "${x}?.Member", "3,4,5,6"); } return(AstVisitAction.Continue); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { var objectOrClass = "object"; var stat = ""; if (memberExpressionAst.Static) { objectOrClass = "class"; stat = "static "; } explanations.Add( new Explanation { Description = $"Access the {stat}property '{memberExpressionAst.Member}' on {objectOrClass} '{memberExpressionAst.Expression}'", CommandName = "Property", HelpResult = HelpTableQuery("about_Properties") }.AddDefaults(memberExpressionAst, explanations)); return(AstVisitAction.Continue); }
public override ExpressionAst VisitMemberExpression(MemberExpressionAst memberExpressionAst) => VisitExpression(base.VisitMemberExpression(memberExpressionAst));
private List <CompletionResult> GetResultForIdentifier(CompletionContext completionContext, ref int replacementIndex, ref int replacementLength, bool isQuotedString) { Token tokenAtCursor = completionContext.TokenAtCursor; Ast lastAst = completionContext.RelatedAsts.Last <Ast>(); List <CompletionResult> source = null; completionContext.WordToComplete = tokenAtCursor.Text; StringConstantExpressionAst ast2 = lastAst as StringConstantExpressionAst; if ((ast2 != null) && ast2.Value.Equals("$", StringComparison.Ordinal)) { completionContext.WordToComplete = ""; return(CompletionCompleters.CompleteVariable(completionContext)); } if ((tokenAtCursor.TokenFlags & TokenFlags.CommandName) != TokenFlags.None) { if ((completionContext.RelatedAsts.Count > 0) && (completionContext.RelatedAsts[0] is ScriptBlockAst)) { Ast lastAstAtCursor = null; InternalScriptPosition position = (InternalScriptPosition)this._cursorPosition; int offset = position.Offset - tokenAtCursor.Text.Length; if (offset >= 0) { InternalScriptPosition cursorPosition = position.CloneWithNewOffset(offset); ScriptBlockAst scriptBlockAst = (ScriptBlockAst)completionContext.RelatedAsts[0]; lastAstAtCursor = GetLastAstAtCursor(scriptBlockAst, cursorPosition); } if (((lastAstAtCursor != null) && (lastAstAtCursor.Extent.EndLineNumber == tokenAtCursor.Extent.StartLineNumber)) && (lastAstAtCursor.Extent.EndColumnNumber == tokenAtCursor.Extent.StartColumnNumber)) { if (tokenAtCursor.Text.IndexOfAny(new char[] { '\\', '/' }) == 0) { string str = CompletionCompleters.ConcatenateStringPathArguments(lastAstAtCursor as CommandElementAst, tokenAtCursor.Text, completionContext); if (str != null) { completionContext.WordToComplete = str; source = new List <CompletionResult>(CompletionCompleters.CompleteFilename(completionContext)); if (source.Count > 0) { replacementIndex = lastAstAtCursor.Extent.StartScriptPosition.Offset; replacementLength += lastAstAtCursor.Extent.Text.Length; } return(source); } VariableExpressionAst variableAst = lastAstAtCursor as VariableExpressionAst; string str2 = (variableAst != null) ? CompletionCompleters.CombineVariableWithPartialPath(variableAst, tokenAtCursor.Text, completionContext.ExecutionContext) : null; if (str2 == null) { return(source); } completionContext.WordToComplete = str2; replacementIndex = lastAstAtCursor.Extent.StartScriptPosition.Offset; replacementLength += lastAstAtCursor.Extent.Text.Length; completionContext.ReplacementIndex = replacementIndex; completionContext.ReplacementLength = replacementLength; } else if (!(lastAstAtCursor is ErrorExpressionAst) || !(lastAstAtCursor.Parent is IndexExpressionAst)) { return(source); } } } if (!isQuotedString) { StringExpandableToken token2 = tokenAtCursor as StringExpandableToken; if (((token2 != null) && (token2.NestedTokens != null)) && (ast2 != null)) { try { string expandedString = null; ExpandableStringExpressionAst expandableStringAst = new ExpandableStringExpressionAst(ast2.Extent, ast2.Value, StringConstantType.BareWord); if (CompletionCompleters.IsPathSafelyExpandable(expandableStringAst, string.Empty, completionContext.ExecutionContext, out expandedString)) { completionContext.WordToComplete = expandedString; } else { return(source); } } catch (Exception exception) { CommandProcessorBase.CheckForSevereException(exception); return(source); } } source = CompleteFileNameAsCommand(completionContext); List <CompletionResult> collection = CompletionCompleters.CompleteCommand(completionContext); if ((collection != null) && (collection.Count > 0)) { source.AddRange(collection); } } return(source); } if (((tokenAtCursor.Text.Length == 1) && tokenAtCursor.Text[0].IsDash()) && (lastAst.Parent is CommandAst)) { if (isQuotedString) { return(source); } return(CompletionCompleters.CompleteCommandParameter(completionContext)); } TokenKind unknown = TokenKind.Unknown; bool flag = lastAst.Parent is MemberExpressionAst; bool @static = flag ? ((MemberExpressionAst)lastAst.Parent).Static : false; bool flag3 = false; if (!flag) { if (tokenAtCursor.Text.Equals(TokenKind.Dot.Text(), StringComparison.Ordinal)) { unknown = TokenKind.Dot; flag = true; } else if (tokenAtCursor.Text.Equals(TokenKind.ColonColon.Text(), StringComparison.Ordinal)) { unknown = TokenKind.ColonColon; flag = true; } else if (tokenAtCursor.Kind.Equals(TokenKind.Multiply) && (lastAst is BinaryExpressionAst)) { BinaryExpressionAst item = (BinaryExpressionAst)lastAst; MemberExpressionAst left = item.Left as MemberExpressionAst; IScriptExtent errorPosition = item.ErrorPosition; if (((left != null) && (item.Operator == TokenKind.Multiply)) && (errorPosition.StartOffset == left.Member.Extent.EndOffset)) { @static = left.Static; unknown = @static ? TokenKind.ColonColon : TokenKind.Dot; flag = true; flag3 = true; completionContext.RelatedAsts.Remove(item); completionContext.RelatedAsts.Add(left); StringConstantExpressionAst member = left.Member as StringConstantExpressionAst; if (member != null) { replacementIndex = member.Extent.StartScriptPosition.Offset; replacementLength += member.Extent.Text.Length; } } } } if (flag) { source = CompletionCompleters.CompleteMember(completionContext, @static || (unknown == TokenKind.ColonColon)); if (source.Any <CompletionResult>()) { if (!flag3 && (unknown != TokenKind.Unknown)) { replacementIndex += tokenAtCursor.Text.Length; replacementLength = 0; } return(source); } } if (lastAst.Parent is HashtableAst) { source = CompletionCompleters.CompleteHashtableKey(completionContext, (HashtableAst)lastAst.Parent); if ((source != null) && source.Any <CompletionResult>()) { return(source); } } if (!isQuotedString) { bool flag4 = false; if ((lastAst.Parent is FileRedirectionAst) || CompleteAgainstSwitchFile(lastAst, completionContext.TokenBeforeCursor)) { string str4 = CompletionCompleters.ConcatenateStringPathArguments(lastAst as CommandElementAst, string.Empty, completionContext); if (str4 != null) { flag4 = true; completionContext.WordToComplete = str4; } } else if (tokenAtCursor.Text.IndexOfAny(new char[] { '\\', '/' }) == 0) { CommandBaseAst parent = lastAst.Parent as CommandBaseAst; if ((parent != null) && parent.Redirections.Any <RedirectionAst>()) { FileRedirectionAst ast11 = parent.Redirections[0] as FileRedirectionAst; if (((ast11 != null) && (ast11.Extent.EndLineNumber == lastAst.Extent.StartLineNumber)) && (ast11.Extent.EndColumnNumber == lastAst.Extent.StartColumnNumber)) { string str5 = CompletionCompleters.ConcatenateStringPathArguments(ast11.Location, tokenAtCursor.Text, completionContext); if (str5 != null) { flag4 = true; completionContext.WordToComplete = str5; replacementIndex = ast11.Location.Extent.StartScriptPosition.Offset; replacementLength += ast11.Location.Extent.EndScriptPosition.Offset - replacementIndex; completionContext.ReplacementIndex = replacementIndex; completionContext.ReplacementLength = replacementLength; } } } } if (flag4) { return(new List <CompletionResult>(CompletionCompleters.CompleteFilename(completionContext))); } string str6 = CompletionCompleters.ConcatenateStringPathArguments(lastAst as CommandElementAst, string.Empty, completionContext); if (str6 != null) { completionContext.WordToComplete = str6; } source = CompletionCompleters.CompleteCommandArgument(completionContext); replacementIndex = completionContext.ReplacementIndex; replacementLength = completionContext.ReplacementLength; } return(source); }
public virtual object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { VisitElement(memberExpressionAst.Expression); VisitElement(memberExpressionAst.Member); return(memberExpressionAst); }
public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { Console.WriteLine("Visited an MemberExpressionAst."); return(memberExpressionAst); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { Console.WriteLine("Visited an MemberExpressionAst."); Console.WriteLine(" " + memberExpressionAst.ToString().Replace(Environment.NewLine, Environment.NewLine + " ")); return(AstVisitAction.Continue); }
public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) => null;
public override AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) { throw new NotImplementedException(); //VisitMemberExpression(memberExpressionAst); }
/// <summary/> public virtual AstVisitAction VisitMemberExpression(MemberExpressionAst memberExpressionAst) => DefaultVisit(memberExpressionAst);
public override AstVisitAction VisitMemberExpression(MemberExpressionAst ast) { return(DoNextAction(ast)); }
public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { throw PSTraceSource.NewArgumentException("ast"); }
public override AstVisitAction VisitMemberExpression(MemberExpressionAst functionDefinitionAst) { // We don't want to discover any variables in member expressisons (`$something.Foo`) return(AstVisitAction.SkipChildren); }
internal SettableMemberExpression(MemberExpressionAst expressionAst, ExecutionVisitor currentExecution) : base(currentExecution) { _expressionAst = expressionAst; }
public object VisitMemberExpression(MemberExpressionAst memberExpressionAst) { return(!((bool)memberExpressionAst.Expression.Accept(this)) ? ((object)0) : ((object)((bool)memberExpressionAst.Member.Accept(this)))); }
public void StaticProperty() { MemberExpressionAst memberExpressionAst = ParseStatement("[System.Int32]::MaxValue") .PipelineElements[0] .Expression; }