Commit Graph

19394 Commits

Author SHA1 Message Date
Thiago de Arruda
e15485c5d6 input: Refactor to ensure user input has higher priority 2014-11-21 15:39:04 -03:00
Rainer Borene
df5a17fb51 legacy tests: migrate test105 2014-11-20 21:06:37 -03:00
Rainer Borene
da3ade6a59 legacy tests: migrate test26 2014-11-20 21:06:37 -03:00
Rainer Borene
021d9bdcc0 legacy tests: migrate test101 2014-11-20 21:06:37 -03:00
Rainer Borene
50876c2f70 legacy tests: migrate test75 2014-11-20 21:06:37 -03:00
Rainer Borene
a93d370c75 legacy tests: migrate test51 2014-11-20 21:06:37 -03:00
Rainer Borene
c9159586b8 legacy tests: migrate test43 2014-11-20 21:06:37 -03:00
Rainer Borene
bbd95c0514 legacy tests: migrate test33 2014-11-20 21:06:37 -03:00
Rainer Borene
8c872a945e legacy tests: migrate test67 2014-11-20 21:06:37 -03:00
Rainer Borene
7fc5d6fc8e legacy tests: migrate test66 2014-11-20 21:06:37 -03:00
Rainer Borene
963a146e8b legacy tests: migrate test25 2014-11-20 21:06:37 -03:00
Rainer Borene
8ca8a0da08 legacy tests: migrate test104 2014-11-20 21:06:37 -03:00
Rainer Borene
1732615290 legacy tests: remove test21 files 2014-11-20 21:06:37 -03:00
Rainer Borene
c152cdd0f3 legacy tests: migrate test5 2014-11-20 21:06:37 -03:00
Florian Walch
2b0d9bdeac Wconversion: Fix warnings in digraph.c. 2014-11-19 17:21:21 +01:00
Florian Walch
d2338ce397 Wconversion: Fix warnings in cursor_shape.c. 2014-11-19 17:21:21 +01:00
Florian Walch
96b31ca048 CMake: Set -Wconversion by default. 2014-11-19 17:21:21 +01:00
Eliseo Martínez
7aa7ce253d Fix warnings: eval.c: f_rpcrequest(): Garbage value: MI.
Problem    : Assigned value is garbage or undefined @ 12578.
Diagnostic : Multithreading issue.
Rationale  : Error can only occur if global `provider_call_nesting` is
             changed while function is executing.
Resolution : Use local copy of global.
2014-11-18 22:20:39 +01:00
Eliseo Martínez
ee134fc698 Fix warnings: screen.c: screenalloc(): Np arg (2): MI.
Problems   : Null pointer argument in call to memory copy function
             @ 6465.
             Null pointer argument in call to memory copy function
             @ 6475.
Diagnostic : Multithreading issues.
Rationale  : Problem occurs if globals `enc_utf8` and `enc_dbcs` are
             modified while function is executing.
Resolution : Use local copy of globals.
2014-11-18 22:00:03 +01:00
Eliseo Martínez
5c00f8c132 Fix warnings: eval.c: do_return(): Np dereference: FP.
Problem    : Dereference of null pointer @ 18841.
Diagnostic : False positive.
Rationale  : Suggested error path takes `reanimate` branch at 18827,
             assigning `rettv = current_funccal->rettv`. Then,
             inmediately after, it supposes rettv is null, which cannot
             happen, since current_funccal->rettv should always be non
             null.
Resolution : Assert current_funccal->rettv non null.
2014-11-18 22:00:03 +01:00
Eliseo Martínez
97be8d45f4 Fix warnings: eval.c: add_nr_var(): Out of bounds: FP.
Problem    : Out-of-bound array access @ 18737.
Diagnostic : False positive.
Rationale  : Situation is intentional. `dictitem_T` is a prefix all dict
             items whill share, but actual size of each item will be
             different depending on its key length. `di_key` array field
             is declared of size 1 just to have a field name, but real
             size will vary for each item.
Resolution : Make analyzer ignore it.
             This could be refactored to use C99-allowed variable length
             arrays, but eval.c is bound to dissappear, so no effort is
             done in that sense.
2014-11-18 22:00:02 +01:00
Eliseo Martínez
3bf32fe43f Fix warnings: eval.c: call_user_func(): Out of bounds: FP.
Problem    : Out-of-bound array access @ 18429.
Diagnostic : False positive.
Rationale  : Situation is intentional. `dictitem_T` is a prefix all dict
             items whill share, but actual size of each item will be
             different depending on its key length. `di_key` array field
             is declared of size 1 just to have a field name, but real
             size will vary for each item.
Resolution : Make analyzer ignore it.
             This could be refactored to use C99-allowed variable length
             arrays, but eval.c is bound to dissappear, so no effort is
             done in that sense.
2014-11-18 22:00:02 +01:00
Eliseo Martínez
34a4a01e4e Fix warnings: eval.c: get_user_func_name(): Np dereference: FP.
Problem    : Dereference of null pointer @ 18216.
Diagnostic : False positive.
Rationale  : `hi` and `done` are static. Intended usage is for the first
             call to have idx == 0, so that they are initialized.
Resolution : Assert hi after (optional) initialization.
2014-11-18 22:00:02 +01:00
Eliseo Martínez
eb15d8777b Fix warnings: eval.c: clear_tv(): Bad free: RI.
Problem    : Bad free @ 16076.
Diagnostic : Real issue.
Rationale  : A non-allocated string is set at 4127, which later on can
             be tried to be freed if aborting.
Resolution : Detect particular case (func with empty name) and don't
             free in that case.
             Another solution (use allocated string) was tried before,
             but it produced a leak difficult to solve.
             Finally applied solution works, but it produces a new false
             positive warning (Np dereference at 13763), deactivated by
             `assert(ptrs[i].item->li_next)`.
2014-11-18 22:00:01 +01:00
Eliseo Martínez
ece19651c6 Fix warnings: eval.c: item_compare(): Garbage value: MI.
Problem    : Result of operation is garbage or undefined @ 13565.
Diagnostic : Multithreading issue.
Rationale  : Problem occurs only if global (static) variable
             `item_compare_keep_zero` changes after being used by
             `do_sort_uniq` but before being used by `item_compare` or
             `item_compare2`.
Resolution : This is not an intra-function problem, as other MI's
             before, but rather an inter-function one. Thus, it can't be
             solved by using local copy of global. Therefore, we are
             forced to do a bit refactoring. We can't simply add a bool
             param to item_compare/item_compare2, as they couldn't be
             passed to qsort() that way. So, item_compare/item_compare2
             are added a bool param and curried versions of them are
             added and used in their place.
2014-11-18 21:57:49 +01:00
Eliseo Martínez
be90cdf4f9 Fix warnings: eval.c: dictitem_alloc(): Out-of-bounds access: FP.
Problem    : Out-of-bound array access @ 5737.
Diagnostic : False positive.
Rationale  : Situation is intentional. `dictitem_T` is a prefix all dict
             items whill share, but actual size of each item will be
             different depending on its key length. `di_key` array field
             is declared of size 1 just to have a field name, but real
             size will vary for each item.
Resolution : Make analyzer ignore it.
             This could be refactored to use C99-allowed variable length
             arrays, but eval.c is bound to dissappear, so no effort is
             done in that sense.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
d3f413ba6a Fix warnings: eval.c: set_var_lval(): Np dereference: FP.
Problem    : Dereference of null pointer @ 2273.
Diagnostic : False positive.
Rationale  : Suggested error would happen when assigning an rvalue with
             more items than the lvalue. Then we would enter conditional
             at:
             ```
             if (lp->ll_li->li_next == NULL) {
               /* Need to add an empty item. */
               list_append_number(lp->ll_list, 0);
             }
             lp->ll_li = lp->ll_li->li_next;
             ```
             Analyzer thinks the value assigned to lp->ll_li is still
             NULL and is hit on the next iteration.
Resolution : Assert lp->ll_li->li_next is not null anymore after
             list_append_number().
2014-11-18 21:57:48 +01:00
Eliseo Martínez
f47d52ea4f Fix warnings: window.c: tabline_height(): Np dereference: FP.
Problem    : Dereference of null pointer @ 4978.
Diagnostic : False positive.
Rationale  : tabline_height() shouldn't be called when a tab doesn't
             exist yet (this is, before initialization).
Resolution : Assert function precondition.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
f544d976fa Fix warnings: window.c: win_drag_vsep_line(): Np dereference: FP.
Problem    : Dereference of null pointer @ 4512.
Diagnostic : False positive.
Rationale  : Suggested error path implies `fr == NULL` after 4504.
             That's not possible, because:
             - curfr and curfr->next must be both nonnull, as we are
               dragging the divider between the two.
             - after conditional, fr is one of those two (the one that
               grows).
Resolution : Assert fr.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
5955f44ade Fix warnings: window.c: winframe_remove(): Np dereference: FP.
Problem    : Dereference of null pointer @ 2196.
Diagnostic : False positive.
Rationale  : Suggested error path implies `frp->child == NULL` while
             being under condition `frp2->fr_layout == frp->fr_layout`,
             which is impossible:
             - If frp2 is frp's parent, then frp2's layout is FR_COL or
               FR_ROW;
             - if frp->child is NULL, the frp's layout is FR_LEAF.
             - Therefore, they can't be equal.
Resolution : Assert frp->child not null.
2014-11-18 21:57:48 +01:00
Eliseo Martínez
c802869e99 Fix warnings: window.c: win_rotate(): Np dereference: FP.
Problem    : Dereference of null pointer @ 1268.
Diagnostic : False positive.
Rationale  : Suggested error path implies current window's frame to be
             the only child of its parent, which is ruled out by
             `if (firstwin == lastwin) {` check at the beginning.
Resolution : Assert another child remains after removing current frame.
             Strictly, assert is only needed in false branch of
             conditional, but we add it the same in the true branch to
             reduce reader surprise.
             Several forms of a single assert after
             `if (firstwin == lastwin) {` were tried, but analyzer
             cannot follow implications that way.
2014-11-18 21:57:47 +01:00
Eliseo Martínez
b4ae878407 Fix warnings: tag.c: get_tags(): Uninitialized arg: RI.
Problem    : Uninitialized argument value @ 2798.
Diagnostic : Real issue.
Rationale  : Tags doesn't have to have a kind. When they have one, both
             `tp.tagkind` and `tp.tagkind_end` are nonnull. But when
             they don't, `tp.tagkind` will we null (but defined), while
             `tp.tagkind_end` will be undefined.
             Therefore, reported invocation is indeed using a garbage
             value for a tag with no kind.
             Problem doesn't have consequences because `add_tag_field()`
             doesn't use `end` param if `start` param is null.
Resolution : Don't use `tp.tagkind_end` if `tp.tagkind` is null.
2014-11-18 21:57:47 +01:00
Eliseo Martínez
3f420ce0d8 Fix warnings: tag.c: jumpto_tag(): Np dereference: MI.
Problem    : Dereference of null pointer @ 2399.
Diagnostic : Multithreading issue.
Rationale  : Error can only occur if global `g_do_tagpreview` changes
             while the function is executing.
Resolution : Use local copy of global var.
2014-11-18 21:57:47 +01:00
Eliseo Martínez
04e42f2ae4 Fix warnings: tag.c: test_for_static()/get_tags(): Various (2): FP.
Problems   : Assigned value is garbage or undefined @ 2191.
             Uninitialized argument value @ 2796.
Diagnostic : False positives.
Rationale  : Both problems share the same cause.
             Error happens in get_tags(), if parse_match() fails because
             of parse_tag_line() failing before. Then, `tp` is not
             correctly initialized and subsequent code accesses garbage
             values.
             This is not really possible, as parse_tag_line() should not
             fail after find_tags() has been successful.
             That is because find_tags() already does tag line parsing,
             using parse_tag_line() itself for it (or a quicker
             alternative that should produce same result). That's why
             return value of parse_match() is ignored, and subsequent
             code assumes it is successful.
Resolution : Assert parse_match() always successful.
2014-11-18 21:57:47 +01:00
Thiago de Arruda
1133e444bc channel: Improve error reporting for invalid responses 2014-11-18 07:56:58 -03:00
Thiago de Arruda
2853500361 channel: Remove invalid free_channel call
When a job fails to start, it will already call the exit_cb which takes care of
freeing the channel.
2014-11-18 07:56:58 -03:00
Thiago de Arruda
17a4bfe007 Remove os/provider.{c,h} and all of its references 2014-11-18 07:56:58 -03:00
Thiago de Arruda
375db3b19a eval/ex_cmds2/ops: Implement providers with eval_call_provider
Replace references to provider_call/provider_has with the new functions
eval_call_provider/eval_has_provider.
2014-11-18 07:56:58 -03:00
Thiago de Arruda
268b2eff4a eval: Add eval_call_provider/eval_has_provider functions
These use autoloaded vimscript to replace the provider_call/provider_has
functions, moving the implementation of providers to pure vimscript(we lose
nothing since vimscript can also call msgpack-rpc functions).

When calling the rpcrequest function from a provider, temporarily switch to the
caller scope. This is required for compatibility with legacy plugins, because
they may depend on scope information that changes when "leaving" the C stack to
enter the vimscript stack.
2014-11-18 07:56:58 -03:00
Fredrik Fornwall
b2b9333179 doc: Remove MS-DOS specific options bioskey and conskey #1353 2014-11-17 17:55:47 -05:00
Justin M. Keyes
75f4451d57 Merge pull request #1483 from oni-link/fix.mch_print_begin.memory.leak.stackversion
coverity/13765,13766,13767,13768: Fix memory leaks in hardcopy.c
2014-11-16 20:33:11 -05:00
oni-link
e175751364 coverity/13765,13766,13767,13768: Fix memory leaks in hardcopy.c
The function mch_print_begin() returns early in case of an
error, but without freeing allocated memory.
To fix this, use stack allocation instead of heap allocation
for the variables res_prolog, res_encoding, res_cidfont and
res_cmap.
2014-11-16 11:22:58 +01:00
Michael Reed
e5a08e7837 arabic.c: Comment fixes
- Use C99 style comments everywhere
- Fix incorrect references to return values
2014-11-15 17:17:21 -05:00
Michael Reed
e1e3edf9d4 farsi.c: Misc. fixes
- Converted some functions to return bools, and changed their respective
  comments to reflect that.
- Minor fixes to a few comments
2014-11-15 17:17:21 -05:00
Justin M. Keyes
7465fc6ee9 Merge pull request #1471 from splinterofchaos/fix-jobstart
jobstart: Check prg arguments for NULL.
2014-11-15 17:10:47 -05:00
Eliseo Martínez
150b0d66e1 Fix warnings: charset.c: win_lbr_chartabsize(): Dead assignment: HI.
Problem    : Dead assignment @ 1037.
Diagnostic : Harmless issue.
Rationale  : `tab_corr` is in effect unused after signaled point.
             Previous code using it after that point was removed at
             24ebb018e2.
Resolution : Remove dead assignment. As only one usage remains, remove
             variable and inline the only usage.
2014-11-15 13:57:11 +01:00
Eliseo Martínez
4a8af9cc99 Fix warnings: undo.c: u_blockfree(): Use after free: FP.
Problem    : Use-after-free @ 2686.
Diagnostic : False positive.
Rationale  : Suggested error path is taking false branch
             `uhp->uh_next.ptr != NULL` @ 2506, which cannot happen when
             `uhp == buf->b_u_oldhead`.
Resolution : Assert `buf->b_u_oldhead` is changed after freeing old one.
2014-11-15 12:50:35 +01:00
Eliseo Martínez
fcd5a8643c Fix warnings: syntax.c: get_id_list(): Double free: FP.
Problem    : Double free @ 5213.
Diagnostic : False positive.
Rationale  : Suggested error path contains two consecutive invocations
             of `ends_excmd(*p)` having different results, which is not
             possible. First invocation is before the while loop. Second
             invocation is the while loop condition itsef.
Resolution : Refactor while loop into do-while loop. That removes the
             impossible path from analysis, and, in addition, is a bit
             more efficient.
2014-11-15 12:49:18 +01:00
Eliseo Martínez
ce9c4e9a6f Fix warnings: syntax.c: syn_regexec(): Uninitialized arg: MI.
Problem    : Uninitialized argument value @ 2863.
Diagnostic : Multithreading issue.
Rationale  : Error can only occur if global `syn_time_on` is changed
             while the function is executing.
Resolution : Use local copy of gloval var.
2014-11-15 12:49:18 +01:00
Eliseo Martínez
2aa8c7c41f Fix warnings: spell.c: spell_edit_score(): Garbage value: MI.
Problem    : Assigned value is garbage or undefined @ 12526.
Diagnostic : Multithreading issue.
Rationale  : Error only occurs if global has_mbyte is modified while
             function is executing.
Resolution : Use local copy of global.
2014-11-15 12:49:18 +01:00