aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Pawel Stefaniak <pstef@FreeBSD.org>2021-09-05 16:59:08 +0000
committerPiotr Pawel Stefaniak <pstef@FreeBSD.org>2021-09-15 23:46:44 +0000
commit2171b2cbe084118e0e8f7de658f0302d0feb8827 (patch)
treeb00191a993a8ebf6e4b11497e20db05c9e4d3dc3
parentbcf2e78dc48378456798191f1c15cb76d6221a65 (diff)
downloadsrc-2171b2cbe084118e0e8f7de658f0302d0feb8827.tar.gz
src-2171b2cbe084118e0e8f7de658f0302d0feb8827.zip
diff: avoid applying offsets to null pointer
This was the only instance of undefined behavior I could find so far.
-rw-r--r--usr.bin/diff/diffreg.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/usr.bin/diff/diffreg.c b/usr.bin/diff/diffreg.c
index c743c862f2d6..4a00aff9243b 100644
--- a/usr.bin/diff/diffreg.c
+++ b/usr.bin/diff/diffreg.c
@@ -255,7 +255,6 @@ diffreg(char *file1, char *file2, int flags, int capsicum)
anychange = 0;
lastline = 0;
lastmatchline = 0;
- context_vec_ptr = context_vec_start - 1;
/*
* hw excludes padding and make sure when -t is not used,
@@ -1050,8 +1049,12 @@ proceed:
/*
* Allocate change records as needed.
*/
- if (context_vec_ptr == context_vec_end - 1) {
- ptrdiff_t offset = context_vec_ptr - context_vec_start;
+ if (context_vec_start == NULL ||
+ context_vec_ptr == context_vec_end - 1) {
+ ptrdiff_t offset = -1;
+
+ if (context_vec_start != NULL)
+ offset = context_vec_ptr - context_vec_start;
max_context <<= 1;
context_vec_start = xreallocarray(context_vec_start,
max_context, sizeof(*context_vec_start));