From b9e95e79712c1e0021e63204e0d910da2ec2692a Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Wed, 5 Jun 2019 16:34:43 +0300 Subject: wordsplit: special handling for WRDSE_USAGE. * src/wordsplit.c (wordsplit_run): Initialize ws_errctx early. This ensures that wordsplit_strerror gets correct data after WRDSE_USAGE. (wordsplit_free): Return immediately if errno was WRDSE_USAGE. --- src/wordsplit.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/wordsplit.c b/src/wordsplit.c index 48312bb..b38dde4 100644 --- a/src/wordsplit.c +++ b/src/wordsplit.c @@ -2686,6 +2686,8 @@ wordsplit_run (const char *command, size_t length, struct wordsplit *wsp, int rc; size_t start; + /* Initialize error context early */ + wsp->ws_errctx = NULL; if (!command) { if (!(flags & WRDSF_INCREMENTAL)) @@ -2796,6 +2798,10 @@ wordsplit_clearerr (struct wordsplit *ws) 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); -- cgit v1.2.1