mirror of
https://github.com/neovim/neovim.git
synced 2025-11-22 10:06:33 +00:00
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`.
This commit is contained in:
@@ -9,8 +9,8 @@
|
|||||||
/*
|
/*
|
||||||
* ex_eval.c: functions for Ex command line for the +eval feature.
|
* ex_eval.c: functions for Ex command line for the +eval feature.
|
||||||
*/
|
*/
|
||||||
|
#include <assert.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
|
||||||
#include "nvim/vim.h"
|
#include "nvim/vim.h"
|
||||||
@@ -670,6 +670,7 @@ static void report_pending(int action, int pending, void *value)
|
|||||||
char *s;
|
char *s;
|
||||||
int save_msg_silent;
|
int save_msg_silent;
|
||||||
|
|
||||||
|
assert(value || !(pending & CSTP_THROW));
|
||||||
|
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case RP_MAKE:
|
case RP_MAKE:
|
||||||
|
|||||||
Reference in New Issue
Block a user