aboutsummaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
...
| * | | Fix warnings: regexp_nfa.c: nfa_regatom(): Dead assignment: HI.Eliseo Martínez2014-11-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dead assignment @ 1554. Diagnostic : Harmless issue. Rationale : `result` is used when analyzing if a bracketed expresion `[<whatever>]` can be condensed into a character class. Not used for anything else anywhere. So, it's safe to remove. Resolution : Remove dead assingment and move declaration of `result` to the scope where it's used.
| * | | Fix warnings: quickfix.c: qf_add_entry(): Np dereference: FP.Eliseo Martínez2014-11-15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 921. Diagnostic : False positive. Rationale : If `qi->qf_lists[qi->qf_curlist].qf_count == 0` doesn't hold, we should be calling function with nonnull `*prevp`. Resolution : Assert nonnull.
| * | | Fix warnings: option.c: do_set(): Dead assignment: HI.Eliseo Martínez2014-11-15
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dead assignment @ 2566. Diagnostic : Harmless issue. Rationale : `nextchar` is used as a lookahead buffer for the character next to the currently examined token. Sometimes it also saves that char while original string is modified (original position of nextchar is nullified for the string to terminate there). In summary, it's an auxiliary variable with no particular complex meaning. Safe to remove if not used. Resolution : Remove dead assignment.
* | | Update README.mdJustin M. Keyes2014-11-14
| | |
* | | Update README.mdJustin M. Keyes2014-11-14
| | |
* | | vim-patch:7.4.378 #1217André Twupack2014-11-14
| | | | | | | | | | | | | | | | | | | | | Problem: Title of quickfist list is not kept for setqflist(list, 'r'). Solution: Keep the title. Add a test. (Lcd) https://code.google.com/p/vim/source/detail?r=v7-4-378
* | | Merge pull request #1473 from alexgenco/patch-1Justin M. Keyes2014-11-14
|\ \ \ | | | | | | | | Fix api metadata function name in docs
| * | | Fix api metadata function name in docsAlex Genco2014-11-13
|/ / / | | | | | | The documentation mentions `vim_get_api_metadata`, but the actual function is `vim_get_api_info`
* | | Merge #1322 'vim-patch:7.4.421 + vim-patch:7.4.437'Justin M. Keyes2014-11-13
|\ \ \
| * | | vim-patch:7.4.437Scott Prager2014-11-13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: New and old regexp engine are not consistent. Solution: Also give an error for "\ze*" for the old regexp engine. https://code.google.com/p/vim/source/detail?r=v7-4-437
| * | | vim-patch:7.4.421Scott Prager2014-11-13
|/ / / | | | | | | | | | | | | | | | | | | Problem: Crash when searching for "\ze*". (Urtica Dioica) Solution: Disallow a multi after \ze and \zs. https://code.google.com/p/vim/source/detail?r=v7-4-421
* | | Merge pull request #1283 from splinterofchaos/breakindent-tabJustin M. Keyes2014-11-12
|\ \ \ | | | | | | | | vim-patch:7.4.416 + vim-patch:7.4.417
| * | | vim-patch:7.4.417Scott Prager2014-11-12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem: After splitting a window and setting 'breakindent' the default minimum with is not respected. Solution: Call briopt_check() when copying options to a new window. https://code.google.com/p/vim/source/detail?r=v7-4-417
| * | | vim-patch:7.4.416Scott Prager2014-11-11
| |/ / | | | | | | | | | | | | | | | | | | Problem: Problem with breakindent/showbreak and tabs. Solution: Handle tabs differently. (Christian Brabandt) https://code.google.com/p/vim/source/detail?name=v7-4-416
* | | Merge pull request #1345 from war1025/dev/wininfo_boolsJustin M. Keyes2014-11-12
|\ \ \ | |_|/ |/| | Convert some values into bools
| * | Convert some values from buffer_defs.h to boolsWayne Rowcliffe2014-11-12
|/ /
* | Merge pull request #1320 from splinterofchaos/ll-lockJustin M. Keyes2014-11-11
|\ \ | |/ |/| vim-patch:7.4.419
| * vim-patch:7.4.419Scott Prager2014-11-11
| | | | | | | | | | | | | | | | Problem: Whan part of a list is locked it's possible to make changes. Solution: Check if any of the list items is locked before make a change. (ZyX) https://code.google.com/p/vim/source/detail?r=v7-4-419
* | Merge pull request #1282 from splinterofchaos/cmd-undefJustin M. Keyes2014-11-11
|\ \ | | | | | | vim-patch:7.4.414 + vim-patch:7.4.415
| * | vim-patch:7.4.415Scott Prager2014-11-11
| | | | | | | | | | | | | | | | | | | | | Problem: Cannot build. Warning for shadowed variable. (John Little) Solution: Add missing change. Remove declaration. https://code.google.com/p/vim/source/detail?name=v7-4-414&r=20dbceb6f4713ccd01be45dc531abc269fbb7579
| * | vim-patch:7.4.414Scott Prager2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | Problem: Cannot define a command only when it's used. Solution: Add the CmdUndefined autocommand event. (partly by Yasuhiro Matsumoto) https://code.google.com/p/vim/source/detail?r=v7-4-414
| * | Fix fileio.c's diagram.Scott Prager2014-11-11
| |/
* | Merge pull request #923 from splinterofchaos/normal-boolJustin M. Keyes2014-11-11
|\ \ | |/ |/| Use bool in normal.h and .c.
| * normal.c: Replace last TRUE/FALSE/OK/FAIL's w/bool.Scott Prager2014-11-11
| |
| * Use bool in signatures of functions in normal.h.Scott Prager2014-11-11
| | | | | | | | | | | | | | | | | | | | Return bool from checkclearop, checkclearopq, add_to_showcmd, find_decl, nv_screengo, get_visual_text, and unadjust_for_sel as these functions all return either TRUE or FALSE or OK or FAIL, but not MAYBE. Change to arguments toplevel of normal_cmd, check of do_check_scrollbind, and locally and thisblock of finddecl, to bools as they represent predicates.
| * Use bool or int for local flag variables.Scott Prager2014-11-11
| | | | | | | | | | | | | | | | | | In do_pending_operator(), nv_zet(), nv_indent(), nv_g_cmd(), and more, replace integer flags with bools when appropriate. However, do keep the TRUEs and FALSEs of nv_cmds[].cmd_arg. It may store values other than TRUE or FALSE, so it seems to make sense to use integral constants.
| * Use bool in do_mouse().Scott Prager2014-11-11
| | | | | | | | | | Change the signature of get_mouse_button() for consistency, and because only do_mouse() uses it.
| * Use bool in normal_cmd().Scott Prager2014-11-11
| | | | | | | | Change signature of set_vcount_ca for consistency.
| * Use bool for flags in oparg_T.Scott Prager2014-11-11
|/ | | | | | | | | | | | | | | | | | | | | | | Several opart_T members like use_reg_one, end_adjusted, empty, is_VIsual, and block_mode, only ever store TRUE or FALSE, so make this constraint explicit by changing them to bools, and TRUE to true and FALSE to false in the context of their uses. The member, inclusive, has several other uses such as in arithmetic equations and one inequality, but every single assignment (obtained with 'grep -r "inclusive \\="') sets it to either TRUE or FALSE. This also implies that the inequality, "oap->end.coladd < oap->inclusive", can only be true when coladd==0 and inclusive==true, so test for that instead. For consistency, change the first argument of findpar (which ends up being inclusive) to bool. Include stdbool.h for consistency with issue #918. This commit shrinks the size of oparg_T from 128 bytes to 112 (-13%) on my machine.
* Merge pull request #1439 from jszakmeister/shuffle-some-includesJustin M. Keyes2014-11-11
|\ | | | | Move many includes down to the EXITFREE block.
| * Move many includes down to the EXITFREE block.John Szakmeister2014-11-09
| | | | | | | | | | | | | | They're unnecessary for the rest of the file, and they're only there at all to help implement `free_all_mem` for use with Clang's Address Sanitizer. So let's move them to avoid any confusion about why they are there.
* | Merge pull request #1449 from jszakmeister/fix-cmake-module-path-usageJohn Szakmeister2014-11-10
|\ \ | | | | | | build: fix CMAKE_MODULE_PATH usage
| * | build: fix CMAKE_MODULE_PATH usageJohn Szakmeister2014-11-10
| | | | | | | | | | | | | | | | | | | | | Fixes #1447. `CMAKE_MODULE_PATH` is meant to be a list of directories, and as such, is not the proper way to launch our scripts. Let's use `${PROJECT_SOURCE_DIR}/cmake` instead. Also, let's not outright set `CMAKE_MODULE_PATH`, but instead append our location to the list.
* | | Merge pull request #1431 from elmart/clang-analysis-fixes-2Justin M. Keyes2014-11-10
|\ \ \ | |/ / |/| | Fix clang analysis warnings. (2)
| * | Fix warnings: message.c: vim_vsnprintf(): Dead assignment (2): HI.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dead assignment @ 3323. Dead assignment @ 3587. Diagnostic : Harmless issues. Rationale : - 3323: Assignment is in fact dead. But, in addition to that, `length_modifier` is assigned default value `\0` when declared and is untouched in path leading to signaled point. So, maintaining assignment adds nothing to code. - 3587: Assignment is in fact dead. It could be thought that `precision_specified` has to be 1 in order to flag `precision` as having a valid value. But that doesn't seem to be the case, as there are places in the code where `precision` gets assigned a default value, even if `precision_specified` is 0. So, maintaining assignment adds nothing to code. Resolution : Remove dead assignments.
| * | Fix warnings: message.c: delete_first_msg(): Np dereference: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 693. Diagnostic : False positive. Rationale : Error condition occurs if `delete_first_msg` is entered two consecutive times, the firt of which sets leaves history empty. But, in that case, second entrance should leave at the `return FAIL`, and thus cannot reach the pointer dereference. Resolution : Assert history will be empty after first entrance.
| * | Fix warnings: memory.c: xcalloc(): 0 size calloc: CW.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Undefined allocation of 0 bytes (CERT MEM04-C; CWE-131) @ 148. Diagnostic : Cautionary warning. Rationale : Reported circumstance (calling calloc with requesting 0 size allocation) can occur, and it's not an issue. It's perfectly legal doing so, though result is implementation dependant. A given implementation can return NULL or a valid pointer, so that free() can be called on it later the same as if it was a real pointer. Such a pointer should not be dereferenced, though. Now, for some reason I can't explain, compiler is warning us in the case of calloc, but not in the case of malloc, which is doing the same. Resolution : Refactor memory functions to avoid using implementation dependant behaviour. Proposed code is neater to read, and it avoids calling system memory functions with size 0, thus behaving the same everywhere. Note that semantics for xmalloc/xcalloc is slightly changed: - Previously, an implementation that returns a valid pointer on malloc/calloc with 0 size, would return that pointer to xmalloc/xcalloc caller. - Currently, a regular pointer is always returned.
| * | Fix warnings: hardcopy.c: mch_print_text_out(): Bad free: FP + RI.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Bad free @ 3058. Diagnostic : False positive uncovering a real issue. Rationale : Signaled error occurs if p gets assigned `(char_u*)""` at line 3009 and then is freed at line 3058. But that cannot happen because of the last guard condition before `free` (`*p != NUL`). So, signaled error is a false positive. Now, examining this code more carefully reveals a real issue: not freeing an empty string may not be always correct, as an empty (but allocated) string could also be returned in `p = string_convert(&prt_conv, p, &len);` if passed '&len' points to 0). Which would in fact be a memory leak. Resolution : Remove the exceptional case. Make p always point to allocated memory, and always free it, when `prt_do_conv` is on.
| * | Fix warnings: fileio.c: aucmd_prepbuf(): Np dereference: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 6219. Diagnostic : False positive. Rationale : Problem occurs if `aucmd_win` is NULL after `win_alloc_aucmd_win()`, which cannot happen since it uses new memory functions. So, this is a leftover since OOM refactorization. Resolution : Remove dead code.
| * | Fix warnings: fileio.c: readfile(): Dead assignment: HI.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dead assignment @ 1754. Diagnostic : Harmless issue. Rationale : It's true `iconv_fd` is not going to be used again (we are in the failure handler). But what is being done (assigning sentinel value to mark as "empty" after destroying) is in fact good practice, which could turn significant if more code is added later on. So, we don't want to remove this. Resolution : Leave it there, but exclude from analysis.
| * | Fix warnings: fold.c: get_foldtext(): Np dereference: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 1701. Diagnostic : False positive. Rationale : Comparison `last_wp != wp` just after initializing `last_wp` to NULL makes the compiler think `wp` can be null. Error appears then on codepath assuming comparison is false (i.e. `wp` is null). Resolution : Change order of OR clauses. That seems not to give motives for the analyzer to check the `wp` null path and removes the warning. But potential null dereference is still there, so we add the nonnull annotation to `wp` parameter.
| * | Fix warnings: ex_getln.c: init_history(): Double free: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Double free @ 4249. Diagnostic : False positive. Rationale : Codepath leading to error contains two consecutive iterations in which `if (--j < 0)` is true. That executes `free` two consecutive times with the same value (hislen - 1) for j, with leads to double free. Now, that can only happen with j == 0 && hislen == 1. And that would imply j == hisidx[type] too, which would take the following break. So, the error codepath cannot really happen, but the compiler cannot deduce the last implication. Resolution : We have two possible solutions for this: 1.- Comparing value of j before and after updating it, and breaking out of iteration if equal. That changes nothing in functionality, but teaches the compiler his proposed error codepath is impossible. 2.- Nullify pointer after freeing. This way, the compiler still thinks his error codepath is possible, but it's not an error anymore, as free(NULL) is a no-op. We opt for solution 2, as solution 1 requires adding logic that adds nothing (and having to explain that clearly in aside comments) just for the purpose of silencing warning. On the other hand, solution 2 improves the code, adding something considered good practice in any case, and therefore doesn't require further explanation.
| * | Fix warnings: ex_eval.c: report_pending(): Np dereference: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 711. Diagnostic : False positive. Rationale : Codepath producing error invokes this function with values `action=RPC_DISCARD, pending=CSTP_FINISH, value=NULL`. Now, for some reason, the analyzer is remembering that `value` is null, and that `action` is `RPC_DISCARD`, but it's not remembering that `pending` is `CSTP_FINISH`. Then, it's taking the wrong branch in the switch for `pending`. That path would never occur invocating the function with those values. Resolution : Assert function precondition between `pending` and `value`. This is, let the compiler know that `value` being null implies `pending` not containing `CSTP_THROW`.
| * | Fix warnings: ex_docmd.c: eval_vars(): Unitialized arg: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Uninitialized argument value @ 7704. Diagnostic : False positive. Rationale : Error occurs if `switch(spec_idx)` doesn't enter any case, which should not occur after `spec_idx = find_cmdline_var(...)` returned non-negative. Resolution : Add default clause to switch and error if reached.
| * | Fix warnings: ex_cmds2.c: do_source(): Unitialized arg (2): MI.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Uninitialized argument value @ 2485. Uninitialized argument value @ 2507. Diagnostic : Multithreading issues. Rationale : Error can only occur if globals `do_profiling`, `time_fd` are modified while function is executing. Resolution : Use local copy of globals.
| * | Fix warnings: ex_cmds2.c: do_source(): Np dereference: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 2462. Diagnostic : False positive. Rationale : Error occurred if neither loop neither following if were entered (this implied `script_items.ga_len < 0`, which should not be possible). Resolution : Assert not negative length (loop or if entered).
| * | Fix warnings: ex_cmds.c: do_ecmd(): Np dereference: FP.Eliseo Martínez2014-11-11
| | | | | | | | | | | | | | | | | | | | | Problem : Dereference of null pointer @ 2768. Diagnostic : False positive. Rationale : `win_valid(oldwin)` implies `oldwin` not null. Resolution : Assert `oldwin` not null.
| * | Fix warnings: ex_cmds.c: do_ascii(): Garbage value (2): MI.Eliseo Martínez2014-11-11
|/ / | | | | | | | | | | | | | | | | Problems : Assigned value is garbage or undefined @ 127. Assigned value is garbage or undefined @ 152. Diagnostic : Multithreading issues. Rationale : Error could only occurr if global `enc_utf8` changed while the function is executing. Resolution : Use local copy of global var.
* | Merge pull request #1448 from tarruda/shell-systemlist-test-fixesJustin M. Keyes2014-11-10
|\ \ | | | | | | Fixes to shell.c, systemlist and functional tests
| * | shell: Use job_write_cb for closing stdinThiago de Arruda2014-11-10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit @45525853d352 removed usage of the `job_write_cb` for closing stdin due to a memory error, but that doesn't work anymore because `job_close_in` closes stdin immediately, possibly trimming input data before it is fully written. Since most memory issues with jobs have been fixed, re-add the `job_write_cb` call to ensure stdin is only closed when it should. Also add tests for scenarios where using the callback makes a difference.