From 855dd3a7e68faa7e994fa1c53aaed75aed6ed036 Mon Sep 17 00:00:00 2001 From: Martin Whitaker Date: Fri, 9 Feb 2024 11:40:20 +0000 Subject: [PATCH] Fix new GCC warning when building ivlpp. Using the old buffer pointer value after a realloc to adjust the pointers into that buffer is technically undefined behaviour. --- ivlpp/lexor.lex | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/ivlpp/lexor.lex b/ivlpp/lexor.lex index 64329ca4c..c47dbed40 100644 --- a/ivlpp/lexor.lex +++ b/ivlpp/lexor.lex @@ -1,7 +1,7 @@ %option prefix="yy" %{ /* - * Copyright (c) 1999-2023 Stephen Williams (steve@icarus.com) + * Copyright (c) 1999-2024 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU @@ -1407,14 +1407,16 @@ static void do_define(void) added_cnt += 2 - argl; if (added_cnt > 0) { - char* base = define_text; + size_t head_idx = head - define_text; + size_t tail_idx = tail - define_text; + size_t cp_idx = cp - define_text; define_cnt += added_cnt; define_text = realloc(define_text, define_cnt + 1); - head = &define_text[head - base]; - tail = &define_text[tail - base]; - cp = &define_text[cp - base]; + head = &define_text[head_idx]; + tail = &define_text[tail_idx]; + cp = &define_text[cp_idx]; added_cnt = 0; }