Age | Commit message (Collapse) | Author |
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Uses currently proof-of-concept openwrt-ci[1] in order to:
* improve the quality of the codebase in various areas
* decrease code review time and help merging contributions faster
* get automagic feedback loop on various platforms and tools
- out of tree build with OpenWrt SDK on following targets:
* ath79-generic
* imx6-generic
* malta-be
* mvebu-cortexa53
- out of tree native build on x86/64 with GCC (versions 8, 9, 10) and Clang 11
- out of tree native x86/64 static code analysis with cppcheck and
scan-build from Clang 11
1. https://gitlab.com/ynezz/openwrt-ci/
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
* add cram based tests
* test under either valgrind or LLVM sanitizers
* add libFuzzer template
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Otherwise tests always pass in ctest.
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
It doesn't work properly with out of tree builds etc.
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Otherwise it prints out complete path which is probably not desired and
we would need to filter out paths in the test's output etc.
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Fixes bunch of following warnings:
lexer.c:68:37: warning: missing field 'parse' initializer [-Wmissing-field-initializers]
lexer.c:138:34: warning: missing field '' initializer [-Wmissing-field-initializers]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Let's enforce additional automatic checks enforced by the compiler in
order to catch possible errors during compilation.
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
So it can be built out of the tree.
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Probably using 3.0+ features anyway and should silence following
warning:
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
Compatibility with CMake < 2.8.12 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
Signed-off-by: Petr Štetiar <ynezz@true.cz>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Fixes: 97bf297 ("compiler: ensure that alternative if/for/while syntax has own block scope")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The `if ...: endif`, `for ...: endfor`, `while ...: endwhile` etc. syntax
statements are supposed to have their own lexical scope, like curly brace
blocks in normal statements.
Without this, local variable declarations within such blocks would
incorrectly shift stack offsets for the remainder of the program.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Fixes: aa9621d ("compiler: rework switch statement code generation")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
- Initialize stack slots belonging to skipped local variable declarations
- Group switch case value tests after switch statement body
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
- Fix an off-by-one when printing push/pop stack indexes
- Properly print negative hexadecimal values
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Fixes: 20a3763 ("vm: fix loop variable memory leak in NEXTK/NEXTKV instruction")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Make sure to increase the refcount of items being moved since the
subsequent put operation will decrease it, prematurely freeing
moved items which will lead to use-after-free errors later on.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Fixes: a478510 ("object: prevent registering the same ressource type multiple times")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When patching jump targets for break statments while compiling for-loop
statments, jump beyond the instructions popping intermediate loop variables
off the stack to fix a stack position mismatch between compiler and vm.
Before that change, local loop body variables got popped twice, breaking
the expected stack layout.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The ref count of the unshifted value returned by uc_unshift() must be
increased in order to prevent a subsequent double free within the VM
when the value eventually goes out of scope.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When skipping over the catch block of a try/catch statement, make sure to
emit the jump after the try scope variables have been popped off the stack
in order to prevent a stack position mismatch between compiler and vm.
Fixes: 9ad9afb ("compiler: fix try/catch miscompilation")
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Use execvp() instead of execv() to lookup the specified executable in $PATH.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Since libjson-c's json_object_get_int64() returns 0 for any input value
that has no integer representation, any kind of invalid array index
incorrectly yielded the first array element.
Fix this issue by explicitly converting string values and by rejecting
any other kind of value.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Ensure that an arrow function body expression is parsed with P_ASSIGN
precedence to not greedily consume comma expressions.
This ensures that an expression like
() => 1, 2
is parsed as function [() => 1], integer [2] and not as
function [() => 1, 2].
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
A logic flaw in the lineinfo encoding function led to an infinite tight
loop when a buffer chunk with 128 byte or more got consumed, which may
happen when parsing very long literals.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
While parsing string literals, actually consume the backslash introducing an
escape sequence to prevent it from ending up in the produced string if the
scanner is at the end of the buffer and the remaining buffer contents are
flushed after the consumer loop.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
When a module registering custom ressource types, such as "fs.so", is
required multiple times we need to ensure that only one instance of a
given ressource type is registered, otherwise objects created after
subsequent requires will cease to function since the internal type
prototype mismatches.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Before this fix, the VM aborted due to an assert in libjson-c when an
attempt was made to set a property on a non-object value.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Simplify handling of default case in switch statements. Instead of jumping
over the default block, simply record the start address of the block since
the initial switch jump is patched into the first non-default case already.
This also leads to slightly smaller bytecode.
Previously, when a case branch fell through into a default block, it did
hit the default skip jump which jumped back into the first case which then
fell through into the default skip jump, leading to an endless loop.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
- Report encountered stderr/stdout when none is expected
- Fix processing testcases where the code to run is defined first
- Set module search path to source tree to enable loading C extensions
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Change uc_include() to retain the prototype of the given scope object when
processing includes. Also change the default behaviour to register the
current VM scope as prototype on the passed scope object so that included
code has access to functions such as length(), print() etc. by default.
To actually sandbox the included code, the new `proto()` function can be
used to create a scope object with an empty prototype:
`include(..., proto({ ... }, {}))`
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The new uc_prototype_lookup() function allows looking up properties in
the given prototype chain.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
Check the numerical error code index before attempting to look it up in
the error string array.
Also make error function available on the cursor instance as well.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|
|
The fs.readlink() function incorrectly produced a JSON string containing
trailing null bytes.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
|