Custom posts listing widget always returns 1 extra result

Anytime you call WP_Query, be sure to filter for only published posts.
Also as a general guide, for any custom queries that you expect or could have more than one result for, try to always pass arguments for:

  1. Publish status
  2. Limit / number of results
  3. Field to sort by
  4. Sort order

Refer to the codex page (https://codex.wordpress.org/Class_Reference/WP_Query) for a full list of arguments you can pass.