[applied] Bug 30959 - Crash on malformed fn call expression
Commit Message
Hello,
The code fails to ignore a function call expression that is considered
malformed by the type suppression parser. Fixed thus.
* src/abg-suppression.cc
(type_suppression::insertion_range::eval_boundary): If the
function call expression is considered malformed, then do not
crash.
* tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-report-1.txt:
New reference test output.
* tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-v{0,1}.c:
Source code of the new input binaries.
* tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-v{0,1}.o:
New input binaries.
* tests/data/test-diff-suppr/test-has-data-member-inserted-at-1.1.suppr:
New test suppression specification.
* tests/data/Makefile.am: Add the new test material above to the
source distribution.
* tests/test-diff-suppr.cc (in_out_specs): Add the new tests to
this harness.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
Applied to master.
---
src/abg-suppression.cc | 9 +++++----
tests/data/Makefile.am | 6 ++++++
...-has-data-member-inserted-at-1-report-1.txt | 17 +++++++++++++++++
.../test-has-data-member-inserted-at-1-v0.c | 10 ++++++++++
.../test-has-data-member-inserted-at-1-v0.o | Bin 0 -> 3232 bytes
.../test-has-data-member-inserted-at-1-v1.c | 11 +++++++++++
.../test-has-data-member-inserted-at-1-v1.o | Bin 0 -> 3240 bytes
.../test-has-data-member-inserted-at-1.1.suppr | 3 +++
tests/test-diff-suppr.cc | 10 ++++++++++
9 files changed, 62 insertions(+), 4 deletions(-)
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-report-1.txt
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-v0.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-v0.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-v1.c
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-at-1-v1.o
create mode 100644 tests/data/test-diff-suppr/test-has-data-member-inserted-at-1.1.suppr
new file mode 100644
index 00000000..d0ddcd2e
new file mode 100644
index 00000000..49ae2f76
@@ -1468,10 +1468,11 @@ type_suppression::insertion_range::eval_boundary(const boundary_sptr boundary,
else if (fn_call_expr_boundary_sptr b = is_fn_call_expr_boundary(boundary))
{
ini::function_call_expr_sptr fn_call = b->as_function_call_expr();
- if ((fn_call->get_name() == "offset_of"
- || fn_call->get_name() == "offset_after"
- || fn_call->get_name() == "offset_of_first_data_member_regexp"
- || fn_call->get_name() == "offset_of_last_data_member_regexp")
+ if (fn_call
+ && (fn_call->get_name() == "offset_of"
+ || fn_call->get_name() == "offset_after"
+ || fn_call->get_name() == "offset_of_first_data_member_regexp"
+ || fn_call->get_name() == "offset_of_last_data_member_regexp")
&& fn_call->get_arguments().size() == 1)
{
if (fn_call->get_name() == "offset_of"
@@ -1880,6 +1880,12 @@ test-diff-suppr/test-has-data-member-inserted-between-1-v3.o \
test-diff-suppr/test-has-data-member-inserted-between-1-v4.c \
test-diff-suppr/test-has-data-member-inserted-between-1-v4.o \
test-diff-suppr/test-has-data-member-inserted-between-1.suppr \
+test-diff-suppr/test-has-data-member-inserted-at-1-report-1.txt \
+test-diff-suppr/test-has-data-member-inserted-at-1-v0.c \
+test-diff-suppr/test-has-data-member-inserted-at-1-v0.o \
+test-diff-suppr/test-has-data-member-inserted-at-1-v1.c \
+test-diff-suppr/test-has-data-member-inserted-at-1-v1.o \
+test-diff-suppr/test-has-data-member-inserted-at-1.1.suppr \
\
test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1 \
test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi \
new file mode 100644
@@ -0,0 +1,17 @@
+Functions changes summary: 0 Removed, 0 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+Unreachable types summary: 0 removed, 1 changed, 0 added type
+
+1 changed type unreachable from any public interface:
+
+ [C] 'struct foo' changed:
+ type size hasn't changed
+ 1 data member insertion:
+ 'int x', at offset 0 (in bits) at test-has-data-member-inserted-at-1-v1.c:3:1
+ 1 data member change:
+ type of 'char p[8]' changed:
+ type name changed from 'char[8]' to 'char[4]'
+ array type size changed from 64 to 32
+ array type subrange 1 changed length from 8 to 4
+ and offset changed from 0 to 32 (in bits) (by +32 bits)
+
new file mode 100644
@@ -0,0 +1,10 @@
+struct foo
+{
+ char p[8];
+};
+
+int
+main(void)
+{
+ return 0;
+}
new file mode 100644
GIT binary patch
literal 3232
zcmcgu&2Jl35TECbW4GJ5NnAlgK-r?AHi);5Lsddcicv(<P}EkHDnunPYx~(=@UG47
zI!el+NJt<A2M!!L^uUEPm)^N>LY(*ykT{kz2bfvUbGI*BH3Er|_RY+1KHsN(_szF2
z7lZ&!0xrQrO``z!N)P2mDmLH*RN>Z@FMq#J`g=cpfnyOwnY028&(V-2JEK_L;SkC~
zl(!L_8G*1;2~)g}z&rTO(on*LX=x#5QAHg|l*DJmnRHt5U3sSHhY32I2HU=5TNUhN
zLA+3@+SbbQ%7R!d%|8ubRk4_DU$8IQuiB!D<>$aEPt=|22Bs?tu~Q|>>?zo()(|PV
z@cNQfnK+$U+Nn~q#>qQN0A(&l6MqT6bncKYgYFP?i&KDwtH_J!`yz57#9x&;VzdGH
zp|FzfMM10-j!)92aYX?~rs`7h=+&Zlw@^U;?Q6H3t@<lYz3#s3)}8gW_4Rsvz3!a7
zsXERTFJXf`x9Z3s8HZ}Kr$QC^ZB)Ie-QV2XI4{qile_DV>^ZU<4y79SfggH_lH+h3
ztB&lb*0?8={gH|x@ca-4!?5R!!`SbIScTTV-S;A>^@o9~b%vb}{aVjYY6HLJwfvsv
z4{BY1PsO!F#YtT2c!`&avg3EVG9Hgc5s*pty;zb}1}bQ&Ncv%{q69ne5?PnKYi|30
zsd3m|V0&xpf^!zPVD%8|pY9_LCs+`7Zi3jG7t6;=<!^A)pGBNLqV({*QJMd|ur)V(
z8675Y?nvil2LAjz&uHb|Y`hPAWX%{0EqP>Ng*>t#y`l$9*5uaa;71N%1Xz!`E*2bn
zj6dG<9J1he4odmw4&bYZEN0ecdSMT{{pnS}$AB{*MV?&^U6JtYtQRx>WP6SErwp7`
zc!mYq=jjuGGCd$fltcGG`fVDJblvep1&_JL>G3A&PT16c#QMj~&ANJyl&8o(#O7Hx
z{hw!?{ORkkP7f!M#_y#XK%Ke9e`ft6b2GogIIT@~eZY<PgT!kgPofF$YbjBC3Apss
zfZK{=a3eMF-1MDm`eAp7HhS}#UaJ+U-ABw`<b^$a2(uvrKU6vdOK6ecW~#S`L7?!N
zbi-kyTzoKOoOtbzIEm^vyO9?tp2&Y>%NS2<r1wduYp^gq=d6=&mQJBUnE4XW4_6+U
z@n_J9&f~w0r~Nl`Qe9pDD^fCK`qH_g*Q$~6A@K$u)(4C)ASXY4cTO_CiQLRdrr+4U
z&s;Op_XZkFjC`*%xTXV{o4z#9y#5=!p*o)Wr~gJ~|8&31oCv{P2CtKnA=9^sw!Hcy
zuKxkYQhj>Y%=#n5D5vfd#gu;GLSJiuxvsDICy3|8-{#Bx;0f_`KJwz<;saTGLj1QJ
zZ@9s}d7#-r_pSYZ;P^-0BE&xB_zmsIT(6&ozegc&{eR{4*XNYhpMLFhyvC^?vo=C-
qpX>LzVfr1SUr{rj_B3y*4&NUa?O8JCPkrUZ|H1wLm<>kRjQ<BUj2Q?3
literal 0
HcmV?d00001
@@ -0,0 +1,11 @@
+struct foo
+{
+ int x;
+ char p[4];
+};
+
+int
+main(void)
+{
+ return 0;
+}
new file mode 100644
GIT binary patch
literal 3240
zcmcgu&2Jl35TEC@W4CVHBu3CQplm8olZsu}rYa#N#VDdpR0OD^f*z1r+t2nEdu?{t
zQ5p^iApsQ}df>=`0|z*B;fTbAKcP2H+{2jzomtOwUSGCq1QJhrJ2StTc{A^0#{Tq;
zH?L)c05t?$g+oc906*pr`Fg_E;VCG?t?he%{zCExzum`g4n%<@i$2fMM;}E^$aaQ9
zC<sw_2SKq1R-PCTBghusLnaHkY|am2m<dqo;>^>>f=nSvB_n1~ge00Mh{Txy94d_X
z4#X^2g^d+)rT9v5r@W4u%=1tzUM*TBTx(vuP%0O#<)!6$v5=p82BVgRRVWrWisT^5
zxFI&jI5R@*lnKkPz)rb>YZY90ZP6-Ctj{m*lxdmznf*mf;zgVp%4U*c!qG=1HwBov
zfi#D<7mx}e{w~cDp{u}&%yM!o8L^x>Jy|yK%LzC!70>2Q-pGmDnGD)rf9saLRejm6
zR^6A}s$IKSt5vJDs=azsw(V^%W`%QU&2|RyIFOrN8OYFYq3DIJ-sax=W#{rGXSZfM
zUEApdLr3=gfggCWbjHCrl5M9go8zt%-yO*a2A&^4e;9P_aS-|40He_5wR&C%mELe5
zEA3(Xj$i5eai#A!y{6yw{C=h5@5!hV%P5X2Z7=o`)@l2ljuVYXqYy~t^t{L+tuv5=
zrVJfFh-4UJ243t`o!zS2`d?xkHy60RwY6cd;uWkN<NT9*#9EpRv40b*VNNWa$`|hA
zl|PFxO&ZD5dA&6EMP_Su<{BDI;M6a@mMr}BPnyz7t?;C_(#)~ul5#$xvoJ#1uplYT
zBPt8DCZcIAIH5_0to4{;vEbC9k;YkoMV&G%IGuvherJ#1Yltjp=QAzW<6eGJ2!};~
z64%pDLq#N9-}M4#LO9J=S$^8US%kC9&^=EZ0P+_Yr#1BVaYw@`?wI9|4g5=%cMW{R
z@@GuVxN46SH^(+a=9o9_&oNH+G}|mw+oYlJ?-L22%2eUMvwVfAxxURfosE7z;6`@`
zvDZWzhZEXUTrBruaH-LN+l(S`L)rJ-q{}t@pff}rb-aexY=(085w#b3K^NPg?$Y-I
zsa!CGVhL^}a%(skNNkdBFpQ;(?ZSy-uk{fxB72Qa=nW)q<Uf)n^rtgY_oSAqGc$eX
zER(H1R!|_!>;&|)l{QTO^Jqlx@!$H>{hMo2TowOY60~93(z~K=Ro85YeV-re0ps&X
z$xhYI8OAq}nro8k57zH9Rm8NV|0gC!wznC)s2rJ^wzSW*{I~f+l|SWAUDnK>>dRac
zA-Koj+azeiv~8d+E&d+I|B!ttKJ^zf{s=KzQ{{<lG9GZCZxp~(#aHwb#MAuST-*mw
z@c;TT{_paGtUSS=-j~WnH~rjv(5y6Ve`5bfdJ$q@vH!ZhDDvw36#N4+Y3Kid&tJV$
zI)D1LQ~nC4e9YJg!LJ;@#|hK#5dDgp{&c5lTV3V)aZ#@ibN`fAn*Rak|FiClyy^cC
Dm(LpS
literal 0
HcmV?d00001
@@ -0,0 +1,3 @@
+[suppress_type]
+ type_kind = struct
+ has_data_member_inserted_at = offset_of_first_data_member_regexp(.*foo[0-9]?$)
@@ -2256,6 +2256,16 @@ InOutSpec in_out_specs[] =
"data/test-diff-suppr/test-has-data-member-inserted-between-1-report-4.txt",
"output/test-diff-suppr/test-has-data-member-inserted-between-1-report-4.txt"
},
+ {
+ "data/test-diff-suppr/test-has-data-member-inserted-at-1-v0.o",
+ "data/test-diff-suppr/test-has-data-member-inserted-at-1-v1.o",
+ "",
+ "",
+ "data/test-diff-suppr/test-has-data-member-inserted-at-1.1.suppr",
+ "--drop-private-types --no-default-suppression --non-reachable-types",
+ "data/test-diff-suppr/test-has-data-member-inserted-at-1-report-1.txt",
+ "output/test-diff-suppr/test-has-data-member-inserted-at-1-report-1.txt"
+ },
// This should be the last entry
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};