Avoid undefined behaviour after realloc()

Adding the offset between the realloc result and the old allocation to
update pointers into the new allocation is undefined behaviour: the
old pointers are no longer valid after realloc() according to the C
standard. While this works on almost all architectures and compilers,
it causes  problems on architectures that track pointer bounds (e.g.
CHERI or Arm's Morello): the value_list pointers will still have the
bounds of the previous allocation and therefore any dereference will
result in a run-time trap.

I found this due to a crash (dereferencing an invalid capability) while
trying to run `xev` over SSH on a CHERI-RISC-V system. With these two
realloc changes, and xorg/proto/xorgproto!41
I am able to succesfully run `xev` compiled for CHERI-RISC-V.

Signed-off-by: Alex Richardson <Alexander.Richardson@cl.cam.ac.uk>
4 jobs for fix-realloc-ub in 9 minutes and 22 seconds (queued for 1 second)
Status Job ID Name Coverage
  Prep
passed check-commits #10938761

00:00:42

passed container-prep #10938762

00:00:23

 
  Build
passed build #10938763

00:08:06

 
  Deploy
failed check-merge-request #10938764
allowed to fail

00:00:34

 
Name Stage Failure
failed
check-merge-request Deploy
  File "/usr/local/lib/python3.9/site-packages/gitlab/exceptions.py", line 306, in wrapped_f
raise error(e.error_message, e.response_code, e.response_body) from e
gitlab.exceptions.GitlabGetError: 404: 404 Project Not Found
Uploading artifacts for failed job
Uploading artifacts...
WARNING: results.xml: no matching files
ERROR: No files to upload
Cleaning up file based variables
ERROR: Job failed: exit code 1