If an environment variable does not exist then `getenv` returns NULL.
This is accounted for in the calculation of `val_len`, setting `val_len`
to `0` if the variable does not exist.

However clang analzyer complains about passing NULL to `memcpy`, even if
the number of bytes to copy is `0`:

> Null pointer passed as an argument to a 'nonnull' parameter

Fix by checking the length of `val_len` before invoking `memcpy`.

This bug was introduced in b2f07451e5dc84e699f5485d1a959515d855d51b.
This fix should be backported to HAProxy 1.6+.
---
 src/cfgparse.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/cfgparse.c b/src/cfgparse.c
index 0e0148159..f505e7999 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -2086,7 +2086,8 @@ next_line:
 
                                /* insert value inside the line */
                                memmove(line + val_len, var_end, end - var_end 
+ 1);
-                               memcpy(line, value, val_len);
+                               if (val_len > 0)
+                                       memcpy(line, value, val_len);
                                end += val_len - (var_end - line);
                                line += val_len;
                        }
-- 
2.21.0


Reply via email to