From 9997d7a27530bfa4f61a6fd84220681f9a72b1a7 Mon Sep 17 00:00:00 2001 From: Jeremiah Orians Date: Sat, 6 Nov 2021 21:55:22 -0400 Subject: [PATCH] catch garbage at the end of a #define --- cc_macro.c | 9 +++++++-- test/test.answers | 12 ++++++------ test/test1000/proof.answer | 2 +- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/cc_macro.c b/cc_macro.c index 82d010f..a0b42ea 100644 --- a/cc_macro.c +++ b/cc_macro.c @@ -396,7 +396,6 @@ void handle_define() { struct macro_list* hold; struct token_list* expansion_end = NULL; - struct token_list* line_start = macro_token; /* don't use #define statements from non-included blocks */ int conditional_define = TRUE; @@ -439,6 +438,8 @@ void handle_define() return; } + require(NULL != hold, "#define got something it can't handle\n"); + expansion_end = macro_token; /* in the first iteration, we set the first token of the expansion, if @@ -449,7 +450,11 @@ void handle_define() } /* throw away if not used */ - if(!conditional_define) free(hold); + if(!conditional_define && (NULL != hold)) + { + free(hold); + hold = NULL; + } eat_current_token(); } diff --git a/test/test.answers b/test/test.answers index 305691a..8b52dfe 100644 --- a/test/test.answers +++ b/test/test.answers @@ -212,9 +212,9 @@ eb1f6aab09a1a4966f9f49a518d8aa03ca97aa7c46e443871d758a306671a85e test/results/t a2cbfd5f76d3be8049c6737e3fa02f191caf29b6885db006fa23f86e6eacc186 test/results/test0106-knight-posix-binary d75e450e2fcdf19df63f9d6a3fe5e032933e57b33f6f06b39a8ed2f3dc759f17 test/results/test0106-riscv64-binary 473cc504d6cba9eaf648abcf15c83a317ff3f4a7f08f5e8936e3b35b2cc4fbc6 test/results/test0106-x86-binary -163b9e09a19f8cd592af1ad1ff289c985e769df17eb67eea33bf7f9fff140654 test/results/test1000-aarch64-binary -c8c56324ce5e53e0ce75a0c84db88c39397f79f761b3e2fbec5714b9f058b37c test/results/test1000-amd64-binary -19e79a0a80d43e22f1cbd1636985b362273fb2c8bafe27eede2f79aea16b07e5 test/results/test1000-armv7l-binary -b0c4cb6ba049f97704df3e3694b47364c1302b28e88d87065b27887642ebda76 test/results/test1000-knight-posix-binary -efe53ac2f7bd3bce3823160232da05af3b8e21e576a38f694272b9dc577a2baa test/results/test1000-riscv64-binary -430978cbac169ce8447eb485632698e5b35abcbb49d4d5156a6b66a607117b32 test/results/test1000-x86-binary +c8360bf5cf47fe68593c5163b0d72db2026563cd3ae9d6569b4e359d5ddf5055 test/results/test1000-aarch64-binary +be6b2b9d3c5da922f2c101b1a1ae3140a2dd4077c9326359b7e5eb4ee3941cf5 test/results/test1000-amd64-binary +6023ece6bedd28707824893d08787f4e796d5e13d8dfcdd61a6c5092e6281d77 test/results/test1000-armv7l-binary +57e67dd208599e752088e78c866c9f40a3dde62d8eb39ce879b41f8ab6b1864d test/results/test1000-knight-posix-binary +dd31a53ba38aa7d0520a490ee1b9c170b5be7a5114b6e0c26a802ecd3eccd1e3 test/results/test1000-riscv64-binary +b26a20f63827cf018b47cf256f20fcc6176cf7cfee28d2e114d945477b53a57e test/results/test1000-x86-binary diff --git a/test/test1000/proof.answer b/test/test1000/proof.answer index 910e114..2c66e1d 100644 --- a/test/test1000/proof.answer +++ b/test/test1000/proof.answer @@ -1 +1 @@ -d9883c3c138fcf943bab6320855cbb30dfa8a7384c6431d4174cb4c137ed644f test/test1000/proof +051da13047c134784983be80777706b8578fed66c45f46702e0c0492b83e413b test/test1000/proof