Commit Graph

2095 Commits

Author SHA1 Message Date
Scott Prager
8390accde7 Fix fileio.c's diagram. 2014-11-11 11:55:58 -05:00
Justin M. Keyes
e450c541dd Merge pull request #1439 from jszakmeister/shuffle-some-includes
Move many includes down to the EXITFREE block.
2014-11-11 01:13:14 -05:00
John Szakmeister
85842b29eb Merge pull request #1449 from jszakmeister/fix-cmake-module-path-usage
build: fix CMAKE_MODULE_PATH usage
2014-11-10 20:54:52 -05:00
Justin M. Keyes
fc19f0c4c6 Merge pull request #1431 from elmart/clang-analysis-fixes-2
Fix clang analysis warnings. (2)
2014-11-10 20:05:42 -05:00
Eliseo Martínez
a6548e4fb3 Fix warnings: message.c: vim_vsnprintf(): Dead assignment (2): HI.
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.
2014-11-11 01:43:14 +01:00
Eliseo Martínez
5bf6639e0f Fix warnings: message.c: delete_first_msg(): Np dereference: FP.
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.
2014-11-11 01:43:14 +01:00
Eliseo Martínez
8bb2c2c074 Fix warnings: memory.c: xcalloc(): 0 size calloc: CW.
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.
2014-11-11 01:43:13 +01:00
Eliseo Martínez
51080737df Fix warnings: hardcopy.c: mch_print_text_out(): Bad free: FP + RI.
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.
2014-11-11 01:43:13 +01:00
Eliseo Martínez
6d057a2ca5 Fix warnings: fileio.c: aucmd_prepbuf(): Np dereference: FP.
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.
2014-11-11 01:43:13 +01:00
Eliseo Martínez
4e02a1bf46 Fix warnings: fileio.c: readfile(): Dead assignment: HI.
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.
2014-11-11 01:43:13 +01:00
Eliseo Martínez
1002e3fe1d Fix warnings: fold.c: get_foldtext(): Np dereference: FP.
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.
2014-11-11 01:43:13 +01:00
Eliseo Martínez
d6472f459b Fix warnings: ex_getln.c: init_history(): Double free: FP.
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.
2014-11-11 01:43:12 +01:00
Eliseo Martínez
ea1f883b19 Fix warnings: ex_eval.c: report_pending(): Np dereference: FP.
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`.
2014-11-11 01:43:12 +01:00
Eliseo Martínez
1575642b11 Fix warnings: ex_docmd.c: eval_vars(): Unitialized arg: FP.
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.
2014-11-11 01:43:12 +01:00
Eliseo Martínez
49cf578b76 Fix warnings: ex_cmds2.c: do_source(): Unitialized arg (2): MI.
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.
2014-11-11 01:43:11 +01:00
Eliseo Martínez
739124c1b8 Fix warnings: ex_cmds2.c: do_source(): Np dereference: FP.
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).
2014-11-11 01:43:11 +01:00
Eliseo Martínez
3efd39a41b Fix warnings: ex_cmds.c: do_ecmd(): Np dereference: FP.
Problem    : Dereference of null pointer @ 2768.
Diagnostic : False positive.
Rationale  : `win_valid(oldwin)` implies `oldwin` not null.
Resolution : Assert `oldwin` not null.
2014-11-11 01:43:11 +01:00
Eliseo Martínez
9c3a3e1381 Fix warnings: ex_cmds.c: do_ascii(): Garbage value (2): MI.
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.
2014-11-11 01:43:10 +01:00
John Szakmeister
2540155591 build: fix CMAKE_MODULE_PATH usage
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.
2014-11-10 19:26:01 -05:00
Justin M. Keyes
3080672650 Merge pull request #1448 from tarruda/shell-systemlist-test-fixes
Fixes to shell.c, systemlist and functional tests
2014-11-10 19:01:53 -05:00
Thiago de Arruda
3e8ef31ada shell: Use job_write_cb for closing stdin
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.
2014-11-10 18:47:46 -03:00
Thiago de Arruda
ab826d88f6 eval: Return an empty list from systemlist() when there's no output
This is the behavior on vim's `systemlist()`.
2014-11-10 18:47:03 -03:00
Thiago de Arruda
63a98fca55 test: Fix nondeterminism in tests with notifications
Tests which spin the event loop and stop it in a notification handler have a
chance of re-entering the event loop due to the `vim_eval` call in the
`request()` helper(assuming the request call is what triggered the
notification). Since this will cause an error to be thrown by the lua client,
don't send the extra `vim_eval` request when the loop has been stopped.
2014-11-10 18:46:09 -03:00
Justin M. Keyes
b0cd397a43 Merge pull request #1416 from jondkinney/master
Fix the nvim-clipboard help instructions
2014-11-10 12:17:47 -05:00
Justin M. Keyes
20b895e624 Merge pull request #1442 from fwalch/improve-legacy2luatest
Improve legacy2luatest script.
2014-11-10 12:15:19 -05:00
John Szakmeister
911c5518a5 Merge pull request #1443 from jszakmeister/allow-root-dir-installs
build: allow installing into the root directory (/)
2014-11-09 19:10:29 -05:00
Justin M. Keyes
8e281b3f70 Merge pull request #1429 from oni-link/fix.job_start.leak
Fix memory leak in job_start().
2014-11-09 18:25:42 -05:00
John Szakmeister
6e87557c08 build: allow installing into the root directory (/)
It turns out that CMake always canonicalizes `CMAKE_INSTALL_PREFIX` to
an absolute path--if it's a relative path, it canonicalizes it relative
to the build directory.  As a result, the only thing the DESTDIR and
relative directory check prevents is an installation into the root
directory since CMake strips the trailing slash, turning "/" into an
empty string.  Let's just remove the check all together, since it cannot
accomplish what we intended.
2014-11-09 17:48:19 -05:00
John Szakmeister
5714044617 Merge pull request #1441 from jszakmeister/remove-redundant-define
Remove redundant USE_ICONV define from config.h.in.
2014-11-09 14:51:25 -05:00
Justin M. Keyes
8a0074d9b8 Merge pull request #1403 from fwalch/version-flags
version: Add compilation info.
2014-11-09 13:54:43 -05:00
Justin M. Keyes
e9ac693bcd Merge pull request #1389 from elmart/clang-analysis-fixes
Fix clang analysis warnings.
2014-11-09 13:31:51 -05:00
Florian Walch
176930fa56 version: Add compilation info. 2014-11-09 18:34:57 +01:00
Florian Walch
9376b3db4b Improve legacy2luatest script. 2014-11-09 15:06:03 +01:00
John Szakmeister
2513c5f648 Remove redundant USE_ICONV define from config.h.in.
This was noticed during a review of #1437.
2014-11-09 08:34:29 -05:00
John Szakmeister
dcccc1a50d Merge pull request #1437 from jszakmeister/build-search-fixes
A few fixes for some build-related issues.
2014-11-09 08:31:33 -05:00
John Szakmeister
c744bb8144 Merge pull request #1440 from jszakmeister/fix-og-flag-usage
build: only attempt to use -Og if it's supported
2014-11-09 08:17:31 -05:00
John Szakmeister
66f16619e4 Merge pull request #1428 from xu-cheng/relocate-formula
Homebrew: move formula to neovim/homebrew-neovim
2014-11-09 07:16:50 -05:00
Xu Cheng
0bc347d85d Homebrew: move formula to neovim/homebrew-neovim 2014-11-09 20:14:01 +08:00
John Szakmeister
d51c0a9471 build: only attempt to use -Og if it's supported
Commit a1d411f9c9 just assumes that gcc
will support the `-Og` option, but gcc that comes with Ubuntu 12.04 does
not.  Let's check to see if the flag is supported, and then decide
whether to enable it or not.
2014-11-09 06:58:17 -05:00
John Szakmeister
05c1394fcd Move many includes down to the EXITFREE block.
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.
2014-11-09 06:27:37 -05:00
John Szakmeister
1ea90f6971 Merge pull request #1400 from jszakmeister/install-helpers-destdir
build: fix the usage of DESTDIR in InstallHelpers.cmake
2014-11-09 05:03:05 -05:00
oni-link
dba8433723 Try to fix problem found in the Travis Ci build.
An uv_pipe_t handle for a WStream could be left open for a
particular code path.

Patch by tarruda.
2014-11-09 10:35:39 +01:00
oni-link
cf95d27689 Mark some function arguments as [consumed] in the docs.
The argument argv of job_start() and channel_from_job() will be
freed. Mark them as such in the comments of this functions.
2014-11-09 10:35:39 +01:00
oni-link
70cb863096 job: Fix memory leak in job_start().
If a new job cannot be started because no slots are free, we return early
without freeing the argv argument.
2014-11-09 10:35:39 +01:00
Justin M. Keyes
c9df7ba308 Merge pull request #1383 from fwalch/nvim-buildtype
CMake: Set custom RelWithDebInfo compile flags.
2014-11-08 18:39:12 -05:00
John Szakmeister
938faf5e2d build: fix the usage of DESTDIR in InstallHelpers.cmake
It turns out that `file(INSTALL ...)` already accounts for `DESTDIR`, so
this wasn't creating the directory structure in the correct location.
Instead, we need to do our existence check with `DESTDIR`, but leave it
off when doing the install step.

While we're at it, add a check to make sure `ENV{DESTDIR}` is not being
used with a relative path, as that construct doesn't make much sense.

This fixes issue #1387 discovered while trying to make helptag
generation work correctly in #1381.
2014-11-08 16:55:15 -05:00
John Szakmeister
9344a40e74 build: pull iconv detection into its own FindIconv.cmake file
This will provide better control for those who may want to alter which
one gets used.
2014-11-08 16:22:35 -05:00
John Szakmeister
203a5166a0 build: give priority to /sw and /opt/local on Mac OS X
Unfortunately, we can't force the specific inclusion of a header file.
So if anything add /opt/local/include to the include path--such as
libintl--then other dependencies might be drawn from /opt/local at
compile time, even though we detected them elsewhere at configure time.
This, in turn, causes issues with mixed versions, such as the iconv.h
header being pulled from /opt/local/include, but linked against the
library in /usr/lib--which can be mismatched versions.

So, despite CMake's best effort to treat /sw and /opt/local as just
another system area, we really need to give them preferential treatment.
To do this, we add them to CMAKE_PREFIX_PATH.

This fixes an issue discovered while re-enabling iconv in #1370.
2014-11-08 16:21:47 -05:00
John Szakmeister
05f78d30ac build: use the proper libintl include variable
What was there worked, but it wasn't meant to be the variable that you
use for inclusion.
2014-11-08 16:11:12 -05:00
Florian Walch
a1d411f9c9 CMake: Set custom RelWithDebInfo compile flags. 2014-11-08 21:54:30 +01:00