1+ import org .apache .commons .lang3 .text .StrBuilder ;
2+ import org .apache .commons .lang3 .text .StrMatcher ;
3+ import org .apache .commons .lang3 .text .StrTokenizer ;
4+ import java .io .StringReader ;
5+ import java .nio .CharBuffer ;
6+ import java .util .ArrayList ;
7+ import java .util .List ;
8+ import java .util .Locale ;
9+
10+ class StrBuilderTest {
11+ String taint () { return "tainted" ; }
12+
13+ void sink (Object o ) {}
14+
15+ void test () throws Exception {
16+
17+ StrBuilder cons1 = new StrBuilder (taint ()); sink (cons1 .toString ()); // $hasTaintFlow=y
18+
19+ StrBuilder sb1 = new StrBuilder (); sb1 .append (taint ().toCharArray ()); sink (sb1 .toString ()); // $hasTaintFlow=y
20+ StrBuilder sb2 = new StrBuilder (); sb2 .append (taint ().toCharArray (), 0 , 0 ); sink (sb2 .toString ()); // $hasTaintFlow=y
21+ StrBuilder sb3 = new StrBuilder (); sb3 .append (CharBuffer .wrap (taint ().toCharArray ())); sink (sb3 .toString ()); // $ MISSING: hasTaintFlow=y
22+ StrBuilder sb4 = new StrBuilder (); sb4 .append (CharBuffer .wrap (taint ().toCharArray ()), 0 , 0 ); sink (sb4 .toString ()); // $ MISSING: hasTaintFlow=y
23+ StrBuilder sb5 = new StrBuilder (); sb5 .append ((CharSequence )taint ()); sink (sb5 .toString ()); // $hasTaintFlow=y
24+ StrBuilder sb6 = new StrBuilder (); sb6 .append ((CharSequence )taint (), 0 , 0 ); sink (sb6 .toString ()); // $hasTaintFlow=y
25+ StrBuilder sb7 = new StrBuilder (); sb7 .append ((Object )taint ()); sink (sb7 .toString ()); // $hasTaintFlow=y
26+ {
27+ StrBuilder auxsb = new StrBuilder (); auxsb .append (taint ());
28+ StrBuilder sb8 = new StrBuilder (); sb8 .append (auxsb ); sink (sb8 .toString ()); // $hasTaintFlow=y
29+ }
30+ StrBuilder sb9 = new StrBuilder (); sb9 .append (new StringBuffer (taint ())); sink (sb9 .toString ()); // $hasTaintFlow=y
31+ StrBuilder sb10 = new StrBuilder (); sb10 .append (new StringBuffer (taint ()), 0 , 0 ); sink (sb10 .toString ()); // $hasTaintFlow=y
32+ StrBuilder sb11 = new StrBuilder (); sb11 .append (new StringBuilder (taint ())); sink (sb11 .toString ()); // $hasTaintFlow=y
33+ StrBuilder sb12 = new StrBuilder (); sb12 .append (new StringBuilder (taint ()), 0 , 0 ); sink (sb12 .toString ()); // $hasTaintFlow=y
34+ StrBuilder sb13 = new StrBuilder (); sb13 .append (taint ()); sink (sb13 .toString ()); // $hasTaintFlow=y
35+ StrBuilder sb14 = new StrBuilder (); sb14 .append (taint (), 0 , 0 ); sink (sb14 .toString ()); // $hasTaintFlow=y
36+ StrBuilder sb15 = new StrBuilder (); sb15 .append (taint (), "format" , "args" ); sink (sb15 .toString ()); // $hasTaintFlow=y
37+ StrBuilder sb16 = new StrBuilder (); sb16 .append ("Format string" , taint (), "args" ); sink (sb16 .toString ()); // $hasTaintFlow=y
38+ {
39+ List <String > taintedList = new ArrayList <>();
40+ taintedList .add (taint ());
41+ StrBuilder sb17 = new StrBuilder (); sb17 .appendAll (taintedList ); sink (sb17 .toString ()); // $hasTaintFlow=y
42+ StrBuilder sb18 = new StrBuilder (); sb18 .appendAll (taintedList .iterator ()); sink (sb18 .toString ()); // $hasTaintFlow=y
43+ }
44+ StrBuilder sb19 = new StrBuilder (); sb19 .appendAll ("clean" , taint ()); sink (sb19 .toString ()); // $hasTaintFlow=y
45+ StrBuilder sb20 = new StrBuilder (); sb20 .appendAll (taint (), "clean" ); sink (sb20 .toString ()); // $hasTaintFlow=y
46+ StrBuilder sb21 = new StrBuilder (); sb21 .appendFixedWidthPadLeft (taint (), 0 , ' ' ); sink (sb21 .toString ()); // $hasTaintFlow=y
47+ StrBuilder sb22 = new StrBuilder (); sb22 .appendFixedWidthPadRight (taint (), 0 , ' ' ); sink (sb22 .toString ()); // $hasTaintFlow=y
48+ StrBuilder sb23 = new StrBuilder (); sb23 .appendln (taint ().toCharArray ()); sink (sb23 .toString ()); // $hasTaintFlow=y
49+ StrBuilder sb24 = new StrBuilder (); sb24 .appendln (taint ().toCharArray (), 0 , 0 ); sink (sb24 .toString ()); // $hasTaintFlow=y
50+ StrBuilder sb25 = new StrBuilder (); sb25 .appendln ((Object )taint ()); sink (sb25 .toString ()); // $hasTaintFlow=y
51+ {
52+ StrBuilder auxsb = new StrBuilder (); auxsb .appendln (taint ());
53+ StrBuilder sb26 = new StrBuilder (); sb26 .appendln (auxsb ); sink (sb26 .toString ()); // $hasTaintFlow=y
54+ }
55+ StrBuilder sb27 = new StrBuilder (); sb27 .appendln (new StringBuffer (taint ())); sink (sb27 .toString ()); // $hasTaintFlow=y
56+ StrBuilder sb28 = new StrBuilder (); sb28 .appendln (new StringBuffer (taint ()), 0 , 0 ); sink (sb28 .toString ()); // $hasTaintFlow=y
57+ StrBuilder sb29 = new StrBuilder (); sb29 .appendln (new StringBuilder (taint ())); sink (sb29 .toString ()); // $hasTaintFlow=y
58+ StrBuilder sb30 = new StrBuilder (); sb30 .appendln (new StringBuilder (taint ()), 0 , 0 ); sink (sb30 .toString ()); // $hasTaintFlow=y
59+ StrBuilder sb31 = new StrBuilder (); sb31 .appendln (taint ()); sink (sb31 .toString ()); // $hasTaintFlow=y
60+ StrBuilder sb32 = new StrBuilder (); sb32 .appendln (taint (), 0 , 0 ); sink (sb32 .toString ()); // $hasTaintFlow=y
61+ StrBuilder sb33 = new StrBuilder (); sb33 .appendln (taint (), "format" , "args" ); sink (sb33 .toString ()); // $hasTaintFlow=y
62+ StrBuilder sb34 = new StrBuilder (); sb34 .appendln ("Format string" , taint (), "args" ); sink (sb34 .toString ()); // $hasTaintFlow=y
63+ StrBuilder sb35 = new StrBuilder (); sb35 .appendSeparator (taint ()); sink (sb35 .toString ()); // $hasTaintFlow=y
64+ StrBuilder sb36 = new StrBuilder (); sb36 .appendSeparator (taint (), 0 ); sink (sb36 .toString ()); // $hasTaintFlow=y
65+ StrBuilder sb37 = new StrBuilder (); sb37 .appendSeparator (taint (), "default" ); sink (sb37 .toString ()); // $hasTaintFlow=y
66+ StrBuilder sb38 = new StrBuilder (); sb38 .appendSeparator ("" , taint ()); sink (sb38 .toString ()); // $hasTaintFlow=y
67+ {
68+ StrBuilder auxsb = new StrBuilder (); auxsb .appendln (taint ());
69+ StrBuilder sb39 = new StrBuilder (); auxsb .appendTo (sb39 ); sink (sb39 .toString ()); // $hasTaintFlow=y
70+ }
71+ {
72+ List <String > taintedList = new ArrayList <>();
73+ taintedList .add (taint ());
74+ StrBuilder sb40 = new StrBuilder (); sb40 .appendWithSeparators (taintedList , ", " ); sink (sb40 .toString ()); // $hasTaintFlow=y
75+ StrBuilder sb41 = new StrBuilder (); sb41 .appendWithSeparators (taintedList .iterator (), ", " ); sink (sb41 .toString ()); // $hasTaintFlow=y
76+ List <String > untaintedList = new ArrayList <>();
77+ StrBuilder sb42 = new StrBuilder (); sb42 .appendWithSeparators (untaintedList , taint ()); sink (sb42 .toString ()); // $hasTaintFlow=y
78+ StrBuilder sb43 = new StrBuilder (); sb43 .appendWithSeparators (untaintedList .iterator (), taint ()); sink (sb43 .toString ()); // $hasTaintFlow=y
79+ String [] taintedArray = new String [] { taint () };
80+ String [] untaintedArray = new String [] {};
81+ StrBuilder sb44 = new StrBuilder (); sb44 .appendWithSeparators (taintedArray , ", " ); sink (sb44 .toString ()); // $hasTaintFlow=y
82+ StrBuilder sb45 = new StrBuilder (); sb45 .appendWithSeparators (untaintedArray , taint ()); sink (sb45 .toString ()); // $hasTaintFlow=y
83+ }
84+ {
85+ StrBuilder sb46 = new StrBuilder (); sb46 .append (taint ());
86+ char [] target = new char [100 ];
87+ sb46 .asReader ().read (target );
88+ sink (target ); // $hasTaintFlow=y
89+ }
90+ StrBuilder sb47 = new StrBuilder (); sb47 .append (taint ()); sink (sb47 .asTokenizer ().next ()); // $hasTaintFlow=y
91+ StrBuilder sb48 = new StrBuilder (); sb48 .append (taint ()); sink (sb48 .build ()); // $hasTaintFlow=y
92+ StrBuilder sb49 = new StrBuilder (); sb49 .append (taint ()); sink (sb49 .getChars (null )); // $hasTaintFlow=y
93+ {
94+ StrBuilder sb50 = new StrBuilder (); sb50 .append (taint ());
95+ char [] target = new char [100 ];
96+ sb50 .getChars (target );
97+ sink (target ); // $hasTaintFlow=y
98+ }
99+ {
100+ StrBuilder sb51 = new StrBuilder (); sb51 .append (taint ());
101+ char [] target = new char [100 ];
102+ sb51 .getChars (0 , 0 , target , 0 );
103+ sink (target ); // $hasTaintFlow=y
104+ }
105+ StrBuilder sb52 = new StrBuilder (); sb52 .insert (0 , taint ().toCharArray ()); sink (sb52 .toString ()); // $hasTaintFlow=y
106+ StrBuilder sb53 = new StrBuilder (); sb53 .insert (0 , taint ().toCharArray (), 0 , 0 ); sink (sb53 .toString ()); // $hasTaintFlow=y
107+ StrBuilder sb54 = new StrBuilder (); sb54 .insert (0 , taint ()); sink (sb54 .toString ()); // $hasTaintFlow=y
108+ StrBuilder sb55 = new StrBuilder (); sb55 .insert (0 , (Object )taint ()); sink (sb55 .toString ()); // $hasTaintFlow=y
109+ StrBuilder sb56 = new StrBuilder (); sb56 .append (taint ()); sink (sb56 .leftString (0 )); // $hasTaintFlow=y
110+ StrBuilder sb57 = new StrBuilder (); sb57 .append (taint ()); sink (sb57 .midString (0 , 0 )); // $hasTaintFlow=y
111+ {
112+ StringReader reader = new StringReader (taint ());
113+ StrBuilder sb58 = new StrBuilder (); sb58 .readFrom (reader ); sink (sb58 .toString ()); // $hasTaintFlow=y
114+ }
115+ StrBuilder sb59 = new StrBuilder (); sb59 .replace (0 , 0 , taint ()); sink (sb59 .toString ()); // $hasTaintFlow=y
116+ StrBuilder sb60 = new StrBuilder (); sb60 .replace (null , taint (), 0 , 0 , 0 ); sink (sb60 .toString ()); // $hasTaintFlow=y
117+ StrBuilder sb61 = new StrBuilder (); sb61 .replaceAll ((StrMatcher )null , taint ()); sink (sb61 .toString ()); // $hasTaintFlow=y
118+ StrBuilder sb62 = new StrBuilder (); sb62 .replaceAll ("search" , taint ()); sink (sb62 .toString ()); // $hasTaintFlow=y
119+ StrBuilder sb63 = new StrBuilder (); sb63 .replaceAll (taint (), "replace" ); sink (sb63 .toString ()); // GOOD (search string doesn't convey taint)
120+ StrBuilder sb64 = new StrBuilder (); sb64 .replaceFirst ((StrMatcher )null , taint ()); sink (sb64 .toString ()); // $hasTaintFlow=y
121+ StrBuilder sb65 = new StrBuilder (); sb65 .replaceFirst ("search" , taint ()); sink (sb65 .toString ()); // $hasTaintFlow=y
122+ StrBuilder sb66 = new StrBuilder (); sb66 .replaceFirst (taint (), "replace" ); sink (sb66 .toString ()); // GOOD (search string doesn't convey taint)
123+ StrBuilder sb67 = new StrBuilder (); sb67 .append (taint ()); sink (sb67 .rightString (0 )); // $hasTaintFlow=y
124+ StrBuilder sb68 = new StrBuilder (); sb68 .append (taint ()); sink (sb68 .subSequence (0 , 0 )); // $hasTaintFlow=y
125+ StrBuilder sb69 = new StrBuilder (); sb69 .append (taint ()); sink (sb69 .substring (0 )); // $hasTaintFlow=y
126+ StrBuilder sb70 = new StrBuilder (); sb70 .append (taint ()); sink (sb70 .substring (0 , 0 )); // $hasTaintFlow=y
127+ StrBuilder sb71 = new StrBuilder (); sb71 .append (taint ()); sink (sb71 .toCharArray ()); // $hasTaintFlow=y
128+ StrBuilder sb72 = new StrBuilder (); sb72 .append (taint ()); sink (sb72 .toCharArray (0 , 0 )); // $hasTaintFlow=y
129+ StrBuilder sb73 = new StrBuilder (); sb73 .append (taint ()); sink (sb73 .toStringBuffer ()); // $hasTaintFlow=y
130+ StrBuilder sb74 = new StrBuilder (); sb74 .append (taint ()); sink (sb74 .toStringBuilder ()); // $hasTaintFlow=y
131+ }
132+
133+ }
0 commit comments