vipsi - the friendly vip script interpreter

Appendix

Known bugs

Deleting Variables in use

With some maliciosness it is possible to delete Glossary: Variable, var_refvariables which are currently in use. List functions: thisthis will crash vipsi. List functions: thisThis problem is probably solved in Flow control: if … then
Flow control: try … then
the
Flow control: nextnext version of vipsi after version 1.0.

vipsi> Instructions: var
How does VScript::Value() work?: Var*&
var
a;
vipsi> Instructions: procproc bummer() { Instructions: deldel a; Flow control: returnreturn "haha!" } vipsi> a = bummer(); Sorry, a fatal error occured: ../Example Scripts: Librarieslibraries/Instructions: var
How does VScript::Value() work?: Var*&
var
/Instructions: var
How does VScript::Value() work?: Var*&
var
.cp in line 248: internal error Abgebrochen bash$

Operators and Functions with Side Effects

In an ideal world an Vipsi command syntax: Expressions
Glossary: Expression
expression
is made up out of terms which modify nothing but their result Glossary: Valuevalue, which they are expected to modify.

But there are some Vipsi command syntax: Operators
Operators
Glossary: Operator
operators
which modify their Glossary: Operator
Glossary: Operand
operands
Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
you will probably frequently Instructions: writewrite Vipsi command syntax: Procedures
Data Types: Procedures
Glossary: Procedure
procedures
which Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
only Flow control: returnreturn a result Glossary: Valuevalue but also modifies some List functions: globals
Shell Immediate Commands: globals
global
data directly.

Vipsi, Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
other computer languages, Flow control: try … thentry to avoid unneccessary copying of data. Therefore Glossary: Operator
Glossary: Operand
operands
Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
Vipsi command syntax: Arguments
Glossary: Arguments
arguments
in Vipsi command syntax: Expressions
Glossary: Expression
expressions
which simply refer to a Glossary: Variable, var_refvariable are Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
copied for further evaluation, but only a reference to Flow control: if … then
Flow control: try … then
the
Glossary: Variable, var_refvariable is remembered.

List functions: thisThis comes to a problem Flow control: if … then
Flow control: if … then
if the
pending Glossary: Variable, var_refvariable is modified by Flow control: if … then
Flow control: try … then
the
side effect of a Vipsi command syntax: Procedures
Data Types: Procedures
Glossary: Procedure
procedure
Operators: Boolean Or with Variable "||="
Operators: Bitwise Or with Variable "|="
Operators: Bitwise Or "|"
Operators: Boolean Or "||"
or
Vipsi command syntax: Operators
Operators
Glossary: Operator
operator
later in Flow control: if … then
Flow control: try … then
the
Vipsi command syntax: Expressions
Glossary: Expression
expression
.

List functions: thisThis is Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
detected for Flow control: if … then
Flow control: try … then
the
sake of Appendix: Speedspeed. Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
it may even be made part of Flow control: if … then
Flow control: try … then
the
syntax definition of vipsi! After all most usages List functions: thisthis way are either exotic Operators: Boolean Or with Variable "||="
Operators: Bitwise Or with Variable "|="
Operators: Bitwise Or "|"
Operators: Boolean Or "||"
or
knowingly abusive.

operator ++ and --

Flow control: if … then
Flow control: try … then
The
prefix Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
postfix Vipsi command syntax: Operators
Operators
Glossary: Operator
operators
++ Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
-- modify Flow control: if … then
Flow control: try … then
the
referenced Glossary: Variable, var_refvariable. They are Flow control: if … then
Flow control: try … then
the
bad side of List functions: thisthis problem. in Operators: Add "+"addition, prefix ++ Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
-- only keep a reference to Flow control: if … then
Flow control: try … then
the
just modified Glossary: Variable, var_refvariable (postfix can't!) Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
thus are also Flow control: if … then
Flow control: try … then
the
vulnerable side of Flow control: if … then
Flow control: try … then
the
problem:

vipsi> Instructions: var
How does VScript::Value() work?: Var*&
var
a = 1
vipsi> a + ++a = 4 (Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
3) vipsi> Instructions: var
How does VScript::Value() work?: Var*&
var
a = 1
vipsi> a + a++ = 3 (Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
2)

Assignment operators = += -= *= /= %= #= ##= etc.

Operators: Assignment "="
Built-in operators: Assignments:
Assignment
Vipsi command syntax: Operators
Operators
Glossary: Operator
operators
deliberately modify their left-side Vipsi command syntax: Arguments
Glossary: Arguments
argument
, the bad side of our problem, Operators: Boolean And with Variable "&&="
Operators: Bitwise And with Variable "&="
Operators: Bitwise And "&"
Operators: Boolean And "&&"
and
in Operators: Add "+"addition to that, all modify-and-assign Vipsi command syntax: Operators
Operators
Glossary: Operator
operators
also Instructions: readread their Glossary: Valuevalue from Flow control: if … then
Flow control: try … then
the
referenced Glossary: Variable, var_refvariable, making Flow control: if … then
Flow control: try … then
them
vulnerable for our problem.

vipsi> Instructions: var
How does VScript::Value() work?: Var*&
var
a = 20
vipsi> a += (a=4) = 8 (Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
24) vipsi> Instructions: var
How does VScript::Value() work?: Var*&
var
a={}
vipsi> a[4]=a[3]=a = { 0, 0, {0,0,0,0}, {0,0,0,0} } Operators: Bitwise Not "~"
Operators: Boolean Negation "!"
not
: {0,0,{},{}}

Valid HTML   Valid CSS