diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wordsplit.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/wordsplit.c b/src/wordsplit.c index 48312bb..b38dde4 100644 --- a/src/wordsplit.c +++ b/src/wordsplit.c @@ -2683,12 +2683,14 @@ static int wordsplit_run (const char *command, size_t length, struct wordsplit *wsp, int flags, int lvl) { int rc; size_t start; + /* Initialize error context early */ + wsp->ws_errctx = NULL; if (!command) { if (!(flags & WRDSF_INCREMENTAL)) return _wsplt_seterr (wsp, WRDSE_USAGE); if (wsp->ws_head) @@ -2793,12 +2795,16 @@ wordsplit_clearerr (struct wordsplit *ws) ws->ws_errno = WRDSE_OK; } void wordsplit_free (struct wordsplit *ws) { + if (ws->ws_errno == WRDSE_USAGE) + /* Usage error: the structure is not properly initialized and there's + nothing to free. */ + return; wordsplit_clearerr (ws); wordsplit_free_nodes (ws); wordsplit_free_words (ws); free (ws->ws_wordv); ws->ws_wordv = NULL; wordsplit_free_envbuf (ws); |