xref: /aosp_15_r20/external/jazzer-api/examples/src/main/java/com/example/ExampleKotlinFuzzer.kt (revision 33edd6723662ea34453766bfdca85dbfdd5342b8)
1 // Copyright 2022 Code Intelligence GmbH
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 package com.example
16 
17 import com.code_intelligence.jazzer.api.FuzzedDataProvider
18 import com.code_intelligence.jazzer.api.FuzzerSecurityIssueMedium
19 
20 object ExampleKotlinFuzzer {
21 
22     @JvmStatic
fuzzerTestOneInputnull23     fun fuzzerTestOneInput(data: FuzzedDataProvider) {
24         exploreMe(data.consumeString(8), data.consumeInt(), data.consumeRemainingAsString())
25     }
26 
exploreMenull27     private fun exploreMe(prefix: String, n: Int, suffix: String) {
28         if (prefix.findAnyOf(arrayListOf("Fuzz", "Test")) != null) {
29             if (n >= 2000000) {
30                 if (suffix.startsWith("@")) {
31                     if (suffix.substring(1) == "Jazzer") {
32                         throw FuzzerSecurityIssueMedium("Jazzer resolved string comparisons in Kotlin")
33                     }
34                 }
35             }
36         }
37     }
38 }
39