aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-10-15 21:11:00 +0300
committerZyX <kp-pav@yandex.ru>2017-10-15 21:11:00 +0300
commit3aa2c0d63ae488e302a89fdcdd650404cb2670fd (patch)
treee9436989d55200b71188768f831e98fad09300b2
parentbc386c48829c431fe5b17592c82eb4099621953a (diff)
downloadrneovim-3aa2c0d63ae488e302a89fdcdd650404cb2670fd.tar.gz
rneovim-3aa2c0d63ae488e302a89fdcdd650404cb2670fd.tar.bz2
rneovim-3aa2c0d63ae488e302a89fdcdd650404cb2670fd.zip
viml/parser/expressions,klee: Fix some problems found by KLEE run
-rw-r--r--src/nvim/viml/parser/expressions.h2
-rw-r--r--test/symbolic/klee/nvim/charset.c20
-rwxr-xr-xtest/symbolic/klee/run.sh2
-rw-r--r--test/symbolic/klee/viml_expressions_parser.c2
-rw-r--r--test/unit/viml/expressions/parser_spec.lua8
5 files changed, 20 insertions, 14 deletions
diff --git a/src/nvim/viml/parser/expressions.h b/src/nvim/viml/parser/expressions.h
index 0198852bed..025f0f766e 100644
--- a/src/nvim/viml/parser/expressions.h
+++ b/src/nvim/viml/parser/expressions.h
@@ -69,7 +69,7 @@ typedef enum {
} ExprOptScope;
#define EXPR_OPT_SCOPE_LIST \
- ((char *)(char[]){ kExprOptScopeGlobal, kExprOptScopeLocal })
+ ((char[]){ kExprOptScopeGlobal, kExprOptScopeLocal })
/// All possible variable scopes
typedef enum {
diff --git a/test/symbolic/klee/nvim/charset.c b/test/symbolic/klee/nvim/charset.c
index 409d7d443c..59fe6a1430 100644
--- a/test/symbolic/klee/nvim/charset.c
+++ b/test/symbolic/klee/nvim/charset.c
@@ -38,20 +38,21 @@ void vim_str2nr(const char_u *const start, int *const prep, int *const len,
}
// Recognize hex, octal and bin.
- if ((ptr[0] == '0') && (ptr[1] != '8') && (ptr[1] != '9')
- && (maxlen == 0 || maxlen > 1)) {
+ if ((what & (STR2NR_HEX|STR2NR_OCT|STR2NR_BIN))
+ && (maxlen == 0 || maxlen > 1)
+ && (ptr[0] == '0') && (ptr[1] != '8') && (ptr[1] != '9')) {
pre = ptr[1];
if ((what & STR2NR_HEX)
+ && (maxlen == 0 || maxlen > 2)
&& ((pre == 'X') || (pre == 'x'))
- && ascii_isxdigit(ptr[2])
- && (maxlen == 0 || maxlen > 2)) {
+ && ascii_isxdigit(ptr[2])) {
// hexadecimal
ptr += 2;
} else if ((what & STR2NR_BIN)
+ && (maxlen == 0 || maxlen > 2)
&& ((pre == 'B') || (pre == 'b'))
- && ascii_isbdigit(ptr[2])
- && (maxlen == 0 || maxlen > 2)) {
+ && ascii_isbdigit(ptr[2])) {
// binary
ptr += 2;
} else {
@@ -80,7 +81,7 @@ void vim_str2nr(const char_u *const start, int *const prep, int *const len,
// Do the string-to-numeric conversion "manually" to avoid sscanf quirks.
int n = 1;
- if ((pre == 'B') || (pre == 'b') || what == STR2NR_BIN + STR2NR_FORCE) {
+ if (pre == 'B' || pre == 'b' || what == (STR2NR_BIN|STR2NR_FORCE)) {
// bin
if (pre != 0) {
n += 2; // skip over "0b"
@@ -97,7 +98,7 @@ void vim_str2nr(const char_u *const start, int *const prep, int *const len,
break;
}
}
- } else if ((pre == '0') || what == STR2NR_OCT + STR2NR_FORCE) {
+ } else if (pre == '0' || what == (STR2NR_OCT|STR2NR_FORCE)) {
// octal
while ('0' <= *ptr && *ptr <= '7') {
// avoid ubsan error for overflow
@@ -111,8 +112,7 @@ void vim_str2nr(const char_u *const start, int *const prep, int *const len,
break;
}
}
- } else if ((pre == 'X') || (pre == 'x')
- || what == STR2NR_HEX + STR2NR_FORCE) {
+ } else if (pre == 'X' || pre == 'x' || what == (STR2NR_HEX|STR2NR_FORCE)) {
// hex
if (pre != 0) {
n += 2; // skip over "0x"
diff --git a/test/symbolic/klee/run.sh b/test/symbolic/klee/run.sh
index 388903c234..c143cd0624 100755
--- a/test/symbolic/klee/run.sh
+++ b/test/symbolic/klee/run.sh
@@ -46,7 +46,7 @@ main() {
line1="$line1 '--output-dir=$KLEE_OUT_DIR' '$KLEE_BIN_DIR/a.bc'"
local line2="for t in '$KLEE_OUT_DIR'/*.err"
line2="$line2 ; do ktest-tool --write-ints"
- line2="$line2 \"\$(printf '%s' \"\$t\" | sed -e 's@.[^/]*\$@.out@')\""
+ line2="$line2 \"\$(printf '%s' \"\$t\" | sed -e 's@\\.[^/]*\$@.ktest@')\""
line2="$line2 ; done"
printf '%s\n%s\n' "$line1" "$line2" | \
docker run \
diff --git a/test/symbolic/klee/viml_expressions_parser.c b/test/symbolic/klee/viml_expressions_parser.c
index c0cedceb21..ed280adb22 100644
--- a/test/symbolic/klee/viml_expressions_parser.c
+++ b/test/symbolic/klee/viml_expressions_parser.c
@@ -89,8 +89,6 @@ int main(const int argc, const char *const *const argv,
kvi_init(pstate.reader.lines);
const ExprAST ast = viml_pexpr_parse(&pstate, flags);
- assert(ast.root != NULL
- || plines[0].size == 0);
assert(ast.root != NULL || ast.err.msg);
viml_pexpr_free_ast(ast);
assert(allocated_memory == 0);
diff --git a/test/unit/viml/expressions/parser_spec.lua b/test/unit/viml/expressions/parser_spec.lua
index 9624ced022..22263af8e2 100644
--- a/test/unit/viml/expressions/parser_spec.lua
+++ b/test/unit/viml/expressions/parser_spec.lua
@@ -6867,5 +6867,13 @@ describe('Expressions parser', function()
},
}, {
})
+ check_parsing('0', 0, {
+ -- 0
+ ast = {
+ 'Integer(val=0):0:0:0',
+ },
+ }, {
+ hl('Number', '0'),
+ })
end)
end)