15
15
* limitations under the License.
16
16
*/
17
17
18
- #include " stdint.h"
19
- #include < log4cxx/nt/nteventlogappender.h>
20
- #include < log4cxx/logstring.h>
21
- #include < log4cxx/helpers/stringhelper.h>
22
18
#include < fuzzer/FuzzedDataProvider.h>
23
- #include < log4cxx/pattern/patternconverter .h>
19
+ #include < log4cxx/spi/loggingevent .h>
24
20
#include < log4cxx/helpers/transcoder.h>
25
21
22
+ #include < log4cxx/pattern/patternconverter.h>
26
23
#include < log4cxx/pattern/loggerpatternconverter.h>
27
24
#include < log4cxx/pattern/literalpatternconverter.h>
28
25
#include < log4cxx/pattern/classnamepatternconverter.h>
43
40
#include < log4cxx/pattern/throwableinformationpatternconverter.h>
44
41
#include < log4cxx/pattern/threadusernamepatternconverter.h>
45
42
43
+ namespace
44
+ {
45
+ const int MaximumOptionByteCount = 1000 ;
46
+ const int MaximumNameByteCount = 100 ;
47
+ }
48
+
46
49
using namespace log4cxx ;
47
50
using namespace log4cxx ::helpers;
48
51
using namespace log4cxx ::spi;
49
52
using namespace log4cxx ::pattern;
50
53
51
- #if LOG4CXX_WCHAR_T_API || LOG4CXX_LOGCHAR_IS_WCHAR_T
52
- wchar_t * wencode (const std::string& src, Pool& p)
53
- {
54
- wchar_t * dst = (wchar_t *) p.palloc ((src.length () + 1 ) * sizeof (wchar_t ));
55
- dst[src.length ()] = 0 ;
56
- std::memcpy (dst, src.data (), src.length () * sizeof (wchar_t ));
57
- return dst;
58
- }
59
- #endif
60
-
61
54
// Creates options from the FuzzedDataProvider
62
- std::vector<log4cxx::LogString> createOptions (FuzzedDataProvider* fdp) {
63
- std::string opt1Str = fdp->ConsumeRandomLengthString ();
64
- std::string opt2Str = fdp->ConsumeRandomLengthString ();
65
- std::string opt3Str = fdp->ConsumeRandomLengthString ();
66
- std::string opt4Str = fdp->ConsumeRandomLengthString ();
67
- std::string opt5Str = fdp->ConsumeRandomLengthString ();
68
-
55
+ auto createOptions (FuzzedDataProvider* fdp) {
56
+ auto opt1Str = fdp->ConsumeRandomLengthString (MaximumOptionByteCount );
57
+ auto opt2Str = fdp->ConsumeRandomLengthString (MaximumOptionByteCount );
58
+ auto opt3Str = fdp->ConsumeRandomLengthString (MaximumOptionByteCount );
59
+ auto opt4Str = fdp->ConsumeRandomLengthString (MaximumOptionByteCount );
60
+ auto opt5Str = fdp->ConsumeRandomLengthString (MaximumOptionByteCount );
61
+
69
62
LogString opt1, opt2, opt3, opt4, opt5;
70
63
71
64
Transcoder::decode (opt1Str, opt1);
@@ -74,121 +67,101 @@ std::vector<log4cxx::LogString> createOptions(FuzzedDataProvider* fdp) {
74
67
Transcoder::decode (opt4Str, opt4);
75
68
Transcoder::decode (opt5Str, opt5);
76
69
77
- std::vector<log4cxx::LogString> options =
78
- { opt1
79
- , opt2
80
- , opt3
81
- , opt4
82
- , opt5
83
- };
84
- return options;
70
+ return std::vector<LogString>
71
+ { opt1
72
+ , opt2
73
+ , opt3
74
+ , opt4
75
+ , opt5
76
+ };
85
77
}
78
+
86
79
extern " C" int LLVMFuzzerTestOneInput (const uint8_t *data, size_t size) {
87
80
// Create a FuzzedDataProvider which we will use to
88
81
// create strings from "data".
89
82
FuzzedDataProvider fdp (data, size);
90
-
91
- std::string loggerStr = fdp.ConsumeRandomLengthString ();
92
- std::string contentStr = fdp.ConsumeRandomLengthString ();
93
-
83
+
84
+ auto loggerStr = fdp.ConsumeRandomLengthString ();
85
+ auto contentStr = fdp.ConsumeRandomLengthString ();
86
+
94
87
LogString logger, content;
95
88
Transcoder::decode (loggerStr, logger);
96
89
Transcoder::decode (contentStr, content);
97
90
98
91
// Create the event
99
- LevelPtr level = Level::getInfo ();
92
+ auto level = Level::getInfo ();
100
93
101
94
Pool p;
102
95
103
- log4cxx::spi::LoggingEventPtr event = log4cxx::spi::LoggingEventPtr (
104
- new log4cxx::spi::LoggingEvent (
105
- logger, level, content, LOG4CXX_LOCATION));
96
+ auto event = std::make_shared<LoggingEvent>(
97
+ logger, level, content, LOG4CXX_LOCATION);
106
98
// Select a converter and invoke it.
107
99
switch (fdp.ConsumeIntegralInRange <int >(0 , 14 )) {
108
100
case 0 : {
109
- std::string str1 = fdp.ConsumeRandomLengthString ();
110
- std::string str2 = fdp.ConsumeRandomLengthString ();
111
- LogString a1, a2 ;
112
- Transcoder::decode (str1, a1 );
113
- Transcoder::decode (str2, a2 );
101
+ auto nameStr = fdp.ConsumeRandomLengthString (MaximumNameByteCount );
102
+ auto opionStr = fdp.ConsumeRandomLengthString (MaximumOptionByteCount );
103
+ LogString name, option ;
104
+ Transcoder::decode (nameStr, name );
105
+ Transcoder::decode (opionStr, option );
114
106
115
- PropertiesPatternConverter* converter = new PropertiesPatternConverter (a1, a2);
116
- converter->format (event, logger, p);
117
- delete converter;
107
+ PropertiesPatternConverter (name, option).format (event, logger, p);
108
+ break ;
118
109
}
119
110
case 1 : {
120
- std::vector<log4cxx::LogString> options = createOptions (&fdp);
121
- LoggerPatternConverter* converter = new LoggerPatternConverter (options);
122
- converter->format (event, logger, p);
123
- delete converter;
111
+ LoggerPatternConverter (createOptions (&fdp)).format (event, logger, p);
112
+ break ;
124
113
}
125
114
case 2 : {
126
- std::vector<log4cxx::LogString> options = createOptions (&fdp);
127
- ClassNamePatternConverter* converter = new ClassNamePatternConverter (options);
128
- converter->format (event, logger, p);
129
- delete converter;
115
+ ClassNamePatternConverter (createOptions (&fdp)).format (event, logger, p);
116
+ break ;
130
117
}
131
118
case 3 : {
132
- std::vector<log4cxx::LogString> options = createOptions (&fdp);
133
- DatePatternConverter* converter = new DatePatternConverter (options);
134
- converter->format (event, logger, p);
135
- delete converter;
119
+ DatePatternConverter (createOptions (&fdp)).format (event, logger, p);
120
+ break ;
136
121
}
137
122
case 4 : {
138
- FullLocationPatternConverter* converter = new FullLocationPatternConverter ();
139
- converter->format (event, logger, p);
140
- delete converter;
123
+ FullLocationPatternConverter ().format (event, logger, p);
124
+ break ;
141
125
}
142
126
case 5 : {
143
- LineLocationPatternConverter* converter = new LineLocationPatternConverter ();
144
- converter->format (event, logger, p);
145
- delete converter;
127
+ LineLocationPatternConverter ().format (event, logger, p);
128
+ break ;
146
129
}
147
130
case 6 : {
148
- MessagePatternConverter* converter = new MessagePatternConverter ();
149
- converter->format (event, logger, p);
150
- delete converter;
131
+ MessagePatternConverter ().format (event, logger, p);
132
+ break ;
151
133
}
152
134
case 7 : {
153
- LineSeparatorPatternConverter* converter = new LineSeparatorPatternConverter ();
154
- converter->format (event, logger, p);
155
- delete converter;
135
+ LineSeparatorPatternConverter ().format (event, logger, p);
136
+ break ;
156
137
}
157
138
case 8 : {
158
- MethodLocationPatternConverter* converter = new MethodLocationPatternConverter ();
159
- converter->format (event, logger, p);
160
- delete converter;
139
+ MethodLocationPatternConverter ().format (event, logger, p);
140
+ break ;
161
141
}
162
142
case 9 : {
163
- LevelPatternConverter* converter = new LevelPatternConverter ();
164
- converter->format (event, logger, p);
165
- delete converter;
143
+ LevelPatternConverter ().format (event, logger, p);
166
144
}
167
145
case 10 : {
168
- RelativeTimePatternConverter* converter = new RelativeTimePatternConverter ();
169
- converter->format (event, logger, p);
170
- delete converter;
146
+ RelativeTimePatternConverter ().format (event, logger, p);
147
+ break ;
171
148
}
172
149
case 11 : {
173
- ThreadPatternConverter* converter = new ThreadPatternConverter ();
174
- converter->format (event, logger, p);
175
- delete converter;
150
+ ThreadPatternConverter ().format (event, logger, p);
151
+ break ;
176
152
}
177
153
case 12 : {
178
- ThreadUsernamePatternConverter* converter = new ThreadUsernamePatternConverter ();
179
- converter->format (event, logger, p);
180
- delete converter;
154
+ ThreadUsernamePatternConverter ().format (event, logger, p);
155
+ break ;
181
156
}
182
157
case 13 : {
183
- NDCPatternConverter* converter = new NDCPatternConverter ();
184
- converter->format (event, logger, p);
185
- delete converter;
158
+ NDCPatternConverter ().format (event, logger, p);
159
+ break ;
186
160
}
187
161
case 14 : {
188
- ThrowableInformationPatternConverter* converter = new ThrowableInformationPatternConverter (fdp.ConsumeBool ());
189
- converter->format (event, logger, p);
190
- delete converter;
162
+ ThrowableInformationPatternConverter (fdp.ConsumeBool ()).format (event, logger, p);
163
+ break ;
191
164
}
192
165
}
193
- return 0 ;
166
+ return 0 ;
194
167
}
0 commit comments