EngineYaml.java

1
package com.jsql.model.injection.engine.model;
2
3
import com.jsql.model.InjectionModel;
4
import com.jsql.model.bean.database.Database;
5
import com.jsql.model.bean.database.Table;
6
import com.jsql.model.injection.strategy.blind.AbstractInjectionBit.BlindOperator;
7
import com.jsql.model.injection.engine.model.yaml.Method;
8
import com.jsql.model.injection.engine.model.yaml.ModelYaml;
9
import com.jsql.util.LogLevelUtil;
10
import com.jsql.util.StringUtil;
11
import org.apache.commons.codec.binary.Hex;
12
import org.apache.commons.lang3.RandomStringUtils;
13
import org.apache.commons.lang3.StringUtils;
14
import org.apache.logging.log4j.LogManager;
15
import org.apache.logging.log4j.Logger;
16
import org.yaml.snakeyaml.Yaml;
17
18
import java.net.URLEncoder;
19
import java.nio.charset.StandardCharsets;
20
import java.util.ArrayList;
21
import java.util.Collections;
22
import java.util.List;
23
import java.util.Map;
24
import java.util.concurrent.ThreadLocalRandom;
25
import java.util.regex.Pattern;
26
27
import static com.jsql.model.accessible.DataAccess.*;
28
29
public class EngineYaml implements AbstractEngine {
30
    
31
    private static final Logger LOGGER = LogManager.getRootLogger();
32
33
    /**
34
     * SQL characters marking the end of the result of an injection.
35
     * Process stops when this schema is encountered:
36
     * <pre>SqLix01x03x03x07
37
     */
38
    public static final String LEAD_HEX = "0x53714c69";
39
    public static final String LEAD_PIPE = "Sq'||'Li";
40
    public static final String TRAIL_SQL = "%01%03%03%07";
41
    public static final String TRAIL_HEX = "0x01030307";
42
43
    /**
44
     * SQL character used between each table cells.
45
     * Expected schema of multiple table cells :
46
     * <pre>
47
     * %04[table cell]%05[number of occurrences]%04%06%04[table cell]%05[number of occurrences]%04
48
     */
49
    public static final String SEPARATOR_CELL_SQL = "%06";
50
    public static final String SEPARATOR_CELL_HEX = "0x06";
51
52
    public static final String ENCLOSE_VALUE_HEX = "0x04";
53
54
    /**
55
     * SQL character used between the table cell and the number of occurrence of the cell text.
56
     * Expected schema of a table cell data is
57
     * <pre>%04[table cell]%05[number of occurrences]%04
58
     */
59
    public static final String SEPARATOR_QTE_SQL = "%05";
60
    public static final String SEPARATOR_QTE_HEX = "0x05";
61
62
    /**
63
     * SQL character enclosing a table cell returned by injection.
64
     * It allows to detect the correct end of a table cell data during parsing.
65
     * Expected schema of a table cell data is
66
     * <pre>%04[table cell]%05[number of occurrences]%04
67
     */
68
    public static final String ENCLOSE_VALUE_SQL = "%04";
69
70
    public static final String CALIBRATOR_SQL = "a";
71
    public static final String CALIBRATOR_HEX = "0x61";
72
    
73
    public static final String FORMAT_INDEX = "1337%s7331";
74
75
    private static final String BINARY_MODE = "${binary.mode}";
76
    public static final String LIMIT = "${limit}";
77
    private static final String LIMIT_VALUE = "${limit.value}";
78
    private static final String RESULT_RANGE = "${result_range}";
79
    private static final String INDICE_UNIQUE = "${indice_unique}";
80
    private static final String CALIBRATOR = "${calibrator}";
81
    private static final String INDICES = "${indices}";
82
    public static final String INDICE = "${indice}";
83
    public static final String WINDOW_CHAR = "${window.char}";
84
    public static final String BLOCK_MULTIBIT = "${multibit.block}";
85
    public static final String WINDOW = "${window}";
86
    public static final String CAPACITY = "${capacity}";
87
    public static final String DEFAULT_CAPACITY = "65565";
88
    private static final String SLEEP_TIME = "${sleep_time}";
89
    private static final String BIT = "${bit}";
90
    private static final String MID_CHR = "${mid}";
91
    private static final String MID_INT = "${mid.int}";
92
    public static final String INJECTION = "${injection}";
93
    public static final String TEST = "${test}";
94
    public static final String FILEPATH_HEX = "${filepath.hex}";
95
    private static final String FIELDS = "${fields}";
96
    private static final String FIELD = "${field.value}";
97
    private static final String TABLE = "${table}";
98
    private static final String DATABASE = "${database}";
99
    private static final String TABLE_HEX = "${table.hex}";
100
    private static final String DATABASE_HEX = "${database.hex}";
101
    private static final String DNS_DOMAIN = "${dns.domain}";
102
    private static final String DNS_RANDOM = "${dns.random}";
103
104
    private final ModelYaml modelYaml;
105
    private final InjectionModel injectionModel;
106
    
107
    public EngineYaml(String fileYaml, InjectionModel injectionModel) {
108
        this.injectionModel = injectionModel;
109
        var yaml = new Yaml();
110
        var modelYaml = yaml.loadAs(
111
            EngineYaml.class.getClassLoader().getResourceAsStream("engine/" + fileYaml),
112
            ModelYaml.class
113
        );
114 1 1. <init> : negated conditional → KILLED
        if (!modelYaml.getClone().isBlank()) {
115
            Map<String, Object> originFile = yaml.load(EngineYaml.class.getClassLoader().getResourceAsStream("engine/" + modelYaml.getClone()));
116
            Map<String, Object> cloneFile = yaml.load(EngineYaml.class.getClassLoader().getResourceAsStream("engine/" + fileYaml));
117 1 1. <init> : removed call to com/jsql/model/injection/engine/model/EngineYaml::mergeMaps → SURVIVED
            EngineYaml.mergeMaps(originFile, cloneFile);
118
            String yamlString = yaml.dump(originFile);
119
            modelYaml = yaml.loadAs(yamlString, ModelYaml.class);
120
        }
121
        this.modelYaml = modelYaml;
122
    }
123
124
    private static void mergeMaps(Map<String, Object> mapOrigin, Map<String, Object> mapClone) {
125
        for (Map.Entry<String, Object> entryClone: mapClone.entrySet()) {
126
            if (
127 1 1. mergeMaps : negated conditional → SURVIVED
                mapOrigin.containsKey(entryClone.getKey())
128 1 1. mergeMaps : negated conditional → KILLED
                && mapOrigin.get(entryClone.getKey()) instanceof Map mapOriginToOverride
129 1 1. mergeMaps : negated conditional → SURVIVED
                && entryClone.getValue() instanceof Map mapCloneToUse
130
            ) {
131 1 1. mergeMaps : removed call to com/jsql/model/injection/engine/model/EngineYaml::mergeMaps → SURVIVED
                EngineYaml.mergeMaps(mapOriginToOverride, mapCloneToUse);
132
            } else {
133 1 1. mergeMaps : negated conditional → SURVIVED
                if (entryClone.getValue() == null) {  // when erasing origin value in clone yml
134
                    mapOrigin.remove(entryClone.getKey());
135
                } else {
136
                    mapOrigin.put(entryClone.getKey(), entryClone.getValue());
137
                }
138
            }
139
        }
140
    }
141
142
    @Override
143
    public String sqlDatabases() {
144
        String sqlQuery = this.modelYaml.getResource().getSchema().getDatabase();
145
        
146 1 1. sqlDatabases : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorUtils().preferencesUtil().isDiosStrategy()) {
147 1 1. sqlDatabases : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getDios().getDatabase())) {
148
                sqlQuery = this.modelYaml.getResource().getDios().getDatabase();
149
            } else {
150
                LOGGER.log(
151
                    LogLevelUtil.CONSOLE_INFORM,
152
                    "Strategy [Dios] activated but database query is undefined for [{}], fallback to default",
153 1 1. lambda$sqlDatabases$0 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlDatabases$0 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
154
                );
155
            }
156 1 1. sqlDatabases : negated conditional → NO_COVERAGE
        } else if (this.injectionModel.getMediatorUtils().preferencesUtil().isZipStrategy()) {
157 1 1. sqlDatabases : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getZip().getDatabase())) {
158
                sqlQuery = this.modelYaml.getResource().getZip().getDatabase();
159
            } else {
160
                LOGGER.log(
161
                    LogLevelUtil.CONSOLE_INFORM,
162
                    "Strategy [Zip] activated but database query is undefined for [{}], fallback to default",
163 1 1. lambda$sqlDatabases$1 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlDatabases$1 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
164
                );
165
            }
166
        }
167 1 1. sqlDatabases : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlDatabases → NO_COVERAGE
        return sqlQuery;
168
    }
169
    
170
    @Override
171
    public String sqlTables(Database database) {
172
        String sqlQuery = this.modelYaml.getResource().getSchema().getTable();
173
        
174 1 1. sqlTables : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorUtils().preferencesUtil().isDiosStrategy()) {
175 1 1. sqlTables : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getDios().getTable())) {
176
                sqlQuery = this.modelYaml.getResource().getDios().getTable();
177
            } else {
178
                LOGGER.log(
179
                    LogLevelUtil.CONSOLE_INFORM,
180
                    "Strategy [Dios] activated but table query is undefined for [{}], fallback to default",
181 1 1. lambda$sqlTables$2 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlTables$2 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
182
                );
183
            }
184 1 1. sqlTables : negated conditional → NO_COVERAGE
        } else if (this.injectionModel.getMediatorUtils().preferencesUtil().isZipStrategy()) {
185 1 1. sqlTables : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getZip().getTable())) {
186
                sqlQuery = this.modelYaml.getResource().getZip().getTable();
187
            } else {
188
                LOGGER.log(
189
                    LogLevelUtil.CONSOLE_INFORM,
190
                    "Strategy [Zip] activated but table query is undefined for [{}], fallback to default",
191 1 1. lambda$sqlTables$3 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlTables$3 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
192
                );
193
            }
194
        }
195
        
196
        String databaseUtf8 = Hex.encodeHexString(database.toString().getBytes(StandardCharsets.UTF_8));
197 1 1. sqlTables : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTables → NO_COVERAGE
        return sqlQuery
198
            .replace(EngineYaml.DATABASE_HEX, databaseUtf8)
199
            .replace(EngineYaml.DATABASE, database.toString());
200
    }
201
202
    @Override
203
    public String sqlColumns(Table table) {
204
        String sqlQuery = this.modelYaml.getResource().getSchema().getColumn();
205
        
206 1 1. sqlColumns : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorUtils().preferencesUtil().isDiosStrategy()) {
207 1 1. sqlColumns : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getDios().getColumn())) {
208
                sqlQuery = this.modelYaml.getResource().getDios().getColumn();
209
            } else {
210
                LOGGER.log(
211
                    LogLevelUtil.CONSOLE_INFORM,
212
                    "Strategy [Dios] activated but column query is undefined for [{}], fallback to default",
213 1 1. lambda$sqlColumns$4 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlColumns$4 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
214
                );
215
            }
216 1 1. sqlColumns : negated conditional → NO_COVERAGE
        } else if (this.injectionModel.getMediatorUtils().preferencesUtil().isZipStrategy()) {
217 1 1. sqlColumns : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getZip().getColumn())) {
218
                sqlQuery = this.modelYaml.getResource().getZip().getColumn();
219
            } else {
220
                LOGGER.log(
221
                    LogLevelUtil.CONSOLE_INFORM,
222
                    "Strategy [Zip] activated but column query is undefined for [{}], fallback to default",
223 1 1. lambda$sqlColumns$5 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlColumns$5 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
224
                );
225
            }
226
        }
227
        
228
        String databaseUtf8 = Hex.encodeHexString(table.getParent().toString().getBytes(StandardCharsets.UTF_8));
229
        String tableUtf8 = Hex.encodeHexString(table.toString().getBytes(StandardCharsets.UTF_8));
230
        
231 1 1. sqlColumns : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlColumns → NO_COVERAGE
        return sqlQuery
232
            .replace(EngineYaml.DATABASE_HEX, databaseUtf8)
233
            .replace(EngineYaml.TABLE_HEX, tableUtf8)
234
            .replace(EngineYaml.DATABASE, table.getParent().toString())
235
            .replace(EngineYaml.TABLE, table.toString());
236
    }
237
238
    @Override
239
    public String sqlRows(String[] namesColumns, Database database, Table table) {
240
        String sqlField = this.modelYaml.getResource().getSchema().getRow().getFields().getField();
241
        String sqlConcatFields = this.modelYaml.getResource().getSchema().getRow().getFields().getConcat();
242
        String sqlQuery = this.modelYaml.getResource().getSchema().getRow().getQuery();
243
        
244 1 1. sqlRows : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorUtils().preferencesUtil().isDiosStrategy()) {
245 1 1. sqlRows : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getDios().getDatabase())) {
246
                sqlField = this.modelYaml.getResource().getDios().getRow().getFields().getField();
247
                sqlConcatFields = this.modelYaml.getResource().getDios().getRow().getFields().getConcat();
248
                sqlQuery = this.modelYaml.getResource().getDios().getRow().getQuery();
249
            } else {
250
                LOGGER.log(
251
                    LogLevelUtil.CONSOLE_INFORM,
252
                    "Strategy [Dios] activated but row query is undefined for [{}], fallback to default",
253 1 1. lambda$sqlRows$6 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlRows$6 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
254
                );
255
            }
256 1 1. sqlRows : negated conditional → NO_COVERAGE
        } else if (this.injectionModel.getMediatorUtils().preferencesUtil().isZipStrategy()) {
257 1 1. sqlRows : negated conditional → NO_COVERAGE
            if (StringUtils.isNotBlank(this.modelYaml.getResource().getZip().getDatabase())) {
258
                sqlField = this.modelYaml.getResource().getZip().getRow().getFields().getField();
259
                sqlConcatFields = this.modelYaml.getResource().getZip().getRow().getFields().getConcat();
260
                sqlQuery = this.modelYaml.getResource().getZip().getRow().getQuery();
261
            } else {
262
                LOGGER.log(
263
                    LogLevelUtil.CONSOLE_INFORM,
264
                    "Strategy [Zip] activated but row query is undefined for [{}], fallback to default",
265 1 1. lambda$sqlRows$7 : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlRows$7 → NO_COVERAGE
                    () -> this.injectionModel.getMediatorEngine().getEngine()
266
                );
267
            }
268
        }
269
        
270
        var matcherSqlField = Pattern.compile("(?s)(.*)"+ Pattern.quote(EngineYaml.FIELD) +"(.*)").matcher(sqlField);
271
        String leadSqlField = StringUtils.EMPTY;
272
        String trailSqlField = StringUtils.EMPTY;
273
        
274 1 1. sqlRows : negated conditional → NO_COVERAGE
        if (matcherSqlField.find()) {
275
            leadSqlField = matcherSqlField.group(1);
276
            trailSqlField = matcherSqlField.group(2);
277
        }
278
        
279
        var namesColumnUtf8 = new String[namesColumns.length];
280 2 1. sqlRows : changed conditional boundary → NO_COVERAGE
2. sqlRows : negated conditional → NO_COVERAGE
        for (var i = 0 ; i < namesColumns.length ; i++) {
281
            namesColumnUtf8[i] = StringUtil.detectUtf8(namesColumns[i]);
282
            namesColumnUtf8[i] = URLEncoder.encode(namesColumnUtf8[i], StandardCharsets.UTF_8);
283
        }
284
        
285
        var nameDatabaseUtf8 = StringUtil.detectUtf8(database.toString());
286
        nameDatabaseUtf8 = URLEncoder.encode(nameDatabaseUtf8, StandardCharsets.UTF_8);
287
        
288
        var nameTableUtf8 = StringUtil.detectUtf8(table.toString());
289
        nameTableUtf8 = URLEncoder.encode(nameTableUtf8, StandardCharsets.UTF_8);
290
        
291 1 1. sqlRows : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlRows → NO_COVERAGE
        return sqlQuery.replace(
292
                EngineYaml.FIELDS,
293
                leadSqlField
294
                + String.join(
295
                    trailSqlField + sqlConcatFields + leadSqlField,
296
                    namesColumnUtf8
297
                )
298
                + trailSqlField
299
            )
300
            .replace(EngineYaml.DATABASE, nameDatabaseUtf8)
301
            .replace(EngineYaml.TABLE, nameTableUtf8);
302
    }
303
304
    @Override
305
    public String sqlTestBlindWithOperator(String check, BlindOperator blindOperator) {
306
        String replacement = this.getMode(blindOperator);
307 1 1. sqlTestBlindWithOperator : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTestBlindWithOperator → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getBlind()
308
            .replace(EngineYaml.BINARY_MODE, replacement)
309
            .replace(EngineYaml.TEST, check)
310
            .trim();  // trim spaces in '${binary.mode} ${test}' when no mode, not covered by cleanSql()
311
    }
312
313
    @Override
314
    public String sqlBlindBit(String inj, int indexChar, int bit, BlindOperator blindOperator) {
315
        String replacement = this.getMode(blindOperator);
316 1 1. sqlBlindBit : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlindBit → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getBlind()
317
            .replace(EngineYaml.BINARY_MODE, replacement)
318
            .replace(
319
                EngineYaml.TEST,
320
                this.modelYaml.getStrategy().getBinary().getTest().getBit()
321
                .replace(EngineYaml.INJECTION, inj)
322
                .replace(EngineYaml.WINDOW_CHAR, Integer.toString(indexChar))
323
                .replace(EngineYaml.BIT, Integer.toString(bit))
324
            )
325
            .trim();  // trim spaces in '${binary.mode} ${test}' when no mode, not covered by cleanSql()
326
    }
327
328
    @Override
329
    public String sqlBlindBin(String inj, int indexChar, int mid, BlindOperator blindOperator) {
330
        String replacement = this.getMode(blindOperator);
331 1 1. sqlBlindBin : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlindBin → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getBlind()
332
            .replace(EngineYaml.BINARY_MODE, replacement)
333
            .replace(
334
                EngineYaml.TEST,
335
                this.modelYaml.getStrategy().getBinary().getTest().getBin()
336
                .replace(EngineYaml.INJECTION, inj)
337
                .replace(EngineYaml.WINDOW_CHAR, Integer.toString(indexChar))
338
                .replace(
339
                    EngineYaml.MID_CHR,
340
                    StringUtil.toUrl(Character.toString((char) mid).replace("'", "''"))  // escape quote
341
                )
342
                .replace(EngineYaml.MID_INT, String.valueOf(mid))
343
            )
344
            .trim();  // trim spaces in '${binary.mode} ${test}' when no mode, not covered by cleanSql()
345
    }
346
347
    @Override
348
    public String sqlTestTimeWithOperator(String check, BlindOperator blindOperator) {
349
        String replacement = this.getMode(blindOperator);
350 1 1. sqlTestTimeWithOperator : negated conditional → NO_COVERAGE
        int countSleepTimeStrategy = this.injectionModel.getMediatorUtils().preferencesUtil().isLimitingSleepTimeStrategy()
351
            ? this.injectionModel.getMediatorUtils().preferencesUtil().countSleepTimeStrategy()
352
            : 5;
353 1 1. sqlTestTimeWithOperator : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTestTimeWithOperator → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTime()
354
            .replace(EngineYaml.BINARY_MODE, replacement)
355
            .replace(EngineYaml.TEST, check)
356
            .replace(EngineYaml.SLEEP_TIME, Long.toString(countSleepTimeStrategy))
357
            .trim();  // trim spaces in '${binary.mode} ${test}' when no mode, not covered by cleanSql()
358
    }
359
360
    @Override
361
    public String sqlTimeBit(String inj, int indexChar, int bit, BlindOperator blindOperator) {
362
        String replacement = this.getMode(blindOperator);
363 1 1. sqlTimeBit : negated conditional → NO_COVERAGE
        int countSleepTimeStrategy = this.injectionModel.getMediatorUtils().preferencesUtil().isLimitingSleepTimeStrategy()
364
            ? this.injectionModel.getMediatorUtils().preferencesUtil().countSleepTimeStrategy()
365
            : 5;
366 1 1. sqlTimeBit : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTimeBit → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTime()
367
            .replace(EngineYaml.BINARY_MODE, replacement)
368
            .replace(
369
                EngineYaml.TEST,
370
                this.modelYaml.getStrategy().getBinary().getTest()
371
                .getBit()
372
                .replace(EngineYaml.INJECTION, inj)
373
                .replace(EngineYaml.WINDOW_CHAR, Integer.toString(indexChar))
374
                .replace(EngineYaml.BIT, Integer.toString(bit))
375
            )
376
            .replace(EngineYaml.SLEEP_TIME, Long.toString(countSleepTimeStrategy))
377
            .trim();  // trim spaces in '${binary.mode} ${test}' when no mode, not covered by cleanSql()
378
    }
379
380
    private String getMode(BlindOperator blindOperator) {
381
        return switch (blindOperator) {
382
            case AND -> this.modelYaml.getStrategy().getBinary().getModeAnd();
383
            case OR -> this.modelYaml.getStrategy().getBinary().getModeOr();
384
            case STACK -> this.modelYaml.getStrategy().getBinary().getModeStack();
385
            default -> StringUtils.EMPTY;
386
        };
387
    }
388
389
    @Override
390
    public String sqlBlind(String sqlQuery, String startPosition, boolean isReport) {
391 1 1. sqlBlind : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlind → NO_COVERAGE
        return EngineYaml.replaceTags(
392
            this.getSlidingWindow(isReport)
393
            .replace(EngineYaml.INJECTION, sqlQuery)
394
            .replace(EngineYaml.WINDOW_CHAR, startPosition)
395
            .replace(EngineYaml.CAPACITY, EngineYaml.DEFAULT_CAPACITY)
396
        );
397
    }
398
399
    @Override
400
    public String sqlTime(String sqlQuery, String startPosition, boolean isReport) {
401 1 1. sqlTime : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTime → NO_COVERAGE
        return EngineYaml.replaceTags(
402
            this.getSlidingWindow(isReport)
403
            .replace(EngineYaml.INJECTION, sqlQuery)
404
            .replace(EngineYaml.WINDOW_CHAR, startPosition)
405
            .replace(EngineYaml.CAPACITY, EngineYaml.DEFAULT_CAPACITY)
406
        );
407
    }
408
409
    @Override
410
    public String sqlMultibit(String inj, int indexChar, int block){
411 1 1. sqlMultibit : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlMultibit → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getMultibit()
412
            .replace(EngineYaml.INJECTION, inj)
413
            .replace(EngineYaml.WINDOW_CHAR, Integer.toString(indexChar))
414
            .replace(EngineYaml.BLOCK_MULTIBIT, Integer.toString(block));
415
    }
416
417
    @Override
418
    public String sqlErrorCalibrator(Method errorMethod) {
419 1 1. sqlErrorCalibrator : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlErrorCalibrator → NO_COVERAGE
        return EngineYaml.replaceTags(
420
            errorMethod.getQuery()
421
            .replace(EngineYaml.WINDOW, this.modelYaml.getStrategy().getConfiguration().getSlidingWindow())
422
            .replace(EngineYaml.INJECTION, this.modelYaml.getStrategy().getConfiguration().getCalibrator())
423
            .replace(EngineYaml.WINDOW_CHAR, "1")
424
            .replace(EngineYaml.CAPACITY, Integer.toString(errorMethod.getCapacity()))
425
        );
426
    }
427
428
    @Override
429
    public String sqlErrorIndice(Method errorMethod) {
430
        var indexZeroToFind = "0";
431 1 1. sqlErrorIndice : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlErrorIndice → NO_COVERAGE
        return EngineYaml.replaceTags(
432
            errorMethod.getQuery()
433
            .replace(EngineYaml.WINDOW, this.modelYaml.getStrategy().getConfiguration().getSlidingWindow())
434
            .replace(EngineYaml.INJECTION, this.modelYaml.getStrategy().getConfiguration().getFailsafe().replace(EngineYaml.INDICE, indexZeroToFind))
435
            .replace(EngineYaml.WINDOW_CHAR, "1")
436
            .replace(EngineYaml.CAPACITY, Integer.toString(errorMethod.getCapacity()))
437
        );
438
    }
439
440
    @Override
441
    public String sqlError(String sqlQuery, String startPosition, int indexMethodError, boolean isReport) {
442 1 1. sqlError : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlError → NO_COVERAGE
        return EngineYaml.replaceTags(
443
            this.modelYaml.getStrategy().getError().getMethod().get(indexMethodError).getQuery()
444
            .replace(EngineYaml.WINDOW, this.getSlidingWindow(isReport))
445
            .replace(EngineYaml.INJECTION, sqlQuery)
446
            .replace(EngineYaml.WINDOW_CHAR, startPosition)
447
            .replace(
448
                EngineYaml.CAPACITY,
449
                Integer.toString(
450
                    this.modelYaml.getStrategy().getError()
451
                    .getMethod()
452
                    .get(indexMethodError)
453
                    .getCapacity()
454
                )
455
            )
456
        );
457
    }
458
459
    @Override
460
    public String sqlUnion(String sqlQuery, String startPosition, boolean isReport) {
461 1 1. sqlUnion : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlUnion → NO_COVERAGE
        return EngineYaml.replaceTags(
462
            this.getSlidingWindow(isReport)
463
            .replace(EngineYaml.INJECTION, sqlQuery)
464
            .replace(EngineYaml.WINDOW_CHAR, startPosition)
465
            .replace(EngineYaml.CAPACITY, this.injectionModel.getMediatorStrategy().getUnion().getPerformanceLength())
466
        );
467
    }
468
469
    @Override
470
    public String sqlDns(String sqlQuery, String startPosition, BlindOperator blindOperator, boolean isReport) {
471
        String replacement = this.getMode(blindOperator);
472
        String result = EngineYaml.replaceTags(
473
            this.modelYaml.getStrategy().getDns()
474
            .replace(EngineYaml.WINDOW, this.getSlidingWindow(isReport))
475
            .replace(EngineYaml.BINARY_MODE, replacement)
476
            .replace(EngineYaml.INJECTION, sqlQuery)
477
            .replace(EngineYaml.DNS_DOMAIN, this.injectionModel.getMediatorUtils().preferencesUtil().getDnsDomain())
478
            .replace(EngineYaml.WINDOW_CHAR, startPosition)
479
            .replace(EngineYaml.CAPACITY, EngineYaml.DEFAULT_CAPACITY)
480
        );
481 1 1. sqlDns : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlDns → NO_COVERAGE
        return Pattern.compile(Pattern.quote(EngineYaml.DNS_RANDOM))
482
            .matcher(result)
483 1 1. lambda$sqlDns$8 : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlDns$8 → NO_COVERAGE
            .replaceAll(m -> String.format("%03d", ThreadLocalRandom.current().nextInt(999)));
484
    }
485
486
    @Override
487
    public String sqlStack(String sqlQuery, String startPosition, boolean isReport) {
488 1 1. sqlStack : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlStack → NO_COVERAGE
        return this.modelYaml.getStrategy().getStack().replace(
489
            EngineYaml.WINDOW,
490
            EngineYaml.replaceTags(
491
                this.getSlidingWindow(isReport)
492
                .replace(EngineYaml.INJECTION, sqlQuery)
493
                .replace(EngineYaml.WINDOW_CHAR, startPosition)
494
                .replace(EngineYaml.CAPACITY, EngineYaml.DEFAULT_CAPACITY)
495
            )
496
        );
497
    }
498
499
    @Override
500
    public String sqlCapacity(String[] indexes) {
501
        String regexIndexes = String.join("|", indexes);
502
        String regexVisibleIndexesToFind = String.format(EngineYaml.FORMAT_INDEX, "(%s)");
503 1 1. sqlCapacity : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlCapacity → NO_COVERAGE
        return this.injectionModel.getMediatorStrategy().getSpecificUnion().getIndexesInUrl().replaceAll(
504
            String.format(regexVisibleIndexesToFind, regexIndexes),
505
            EngineYaml.replaceTags(
506
                this.modelYaml.getStrategy().getUnion().getCapacity()
507
                .replace(EngineYaml.CALIBRATOR, this.modelYaml.getStrategy().getConfiguration().getCalibrator())
508
                .replace(EngineYaml.INDICE, "$1")
509
            )
510
        );
511
    }
512
513
    @Override
514
    public String sqlIndices(Integer nbFields) {
515
        String replaceTag = StringUtils.EMPTY;
516
        List<String> fields = new ArrayList<>();
517
        var indice = 1;
518 2 1. sqlIndices : changed conditional boundary → NO_COVERAGE
2. sqlIndices : negated conditional → NO_COVERAGE
        for ( ; indice <= nbFields ; indice++) {
519
            String field = this.modelYaml.getStrategy().getConfiguration().getFailsafe().replace(EngineYaml.INDICE, Integer.toString(indice));
520
            fields.add(field);
521
            replaceTag = field;
522
        }
523 1 1. sqlIndices : Changed increment from -1 to 1 → NO_COVERAGE
        indice--;
524 1 1. sqlIndices : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlIndices → NO_COVERAGE
        return this.modelYaml.getStrategy().getUnion()
525
            .getIndices()
526
            .replace(
527
                EngineYaml.INDICES,
528
                String.join(",", fields.toArray(new String[0]))
529
            )
530
            .replace(EngineYaml.INDICE_UNIQUE, replaceTag)
531
            .replace(
532
                EngineYaml.RESULT_RANGE,
533
                String.join(",", Collections.nCopies(indice, "r"))
534
            );
535
    }
536
537
    @Override
538
    public String sqlLimit(Integer limitSqlResult) {
539
        var limitBoundary = 0;
540
        try {
541
            limitBoundary = Integer.parseInt(this.modelYaml.getStrategy().getConfiguration().getLimitBoundary());
542
        } catch (NumberFormatException e) {
543
            LOGGER.log(LogLevelUtil.CONSOLE_ERROR, "Incorrect Limit start index, force to 0");
544
        }
545 1 1. sqlLimit : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlLimit → NO_COVERAGE
        return this.modelYaml.getStrategy().getConfiguration()
546
            .getLimit()
547 1 1. sqlLimit : Replaced integer addition with subtraction → NO_COVERAGE
            .replace(EngineYaml.LIMIT_VALUE, Integer.toString(limitSqlResult + limitBoundary));
548
    }
549
    
550
    @Override
551
    public String fingerprintErrorsAsRegex() {
552 1 1. fingerprintErrorsAsRegex : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::fingerprintErrorsAsRegex → NO_COVERAGE
        return "(?si)"+ StringUtils.join(
553
            this.modelYaml.getStrategy().getConfiguration().getFingerprint()
554
            .getErrorMessage()
555
            .stream()
556 1 1. lambda$fingerprintErrorsAsRegex$9 : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::lambda$fingerprintErrorsAsRegex$9 → NO_COVERAGE
            .map(m -> ".*"+ m +".*")
557
            .toArray(),
558
            "|"
559
        );
560
    }
561
    
562
    public static String replaceTags(String sqlRequest) {
563 1 1. replaceTags : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::replaceTags → NO_COVERAGE
        return sqlRequest
564
            .replace("${enclose_value_sql}", EngineYaml.ENCLOSE_VALUE_SQL)
565
            .replace("${enclose_value_hex}", EngineYaml.ENCLOSE_VALUE_HEX)
566
            .replace("${separator_qte_sql}", EngineYaml.SEPARATOR_QTE_SQL)
567
            .replace("${separator_qte_hex}", EngineYaml.SEPARATOR_QTE_HEX)
568
            .replace("${separator_cell_sql}", EngineYaml.SEPARATOR_CELL_SQL)
569
            .replace("${separator_cell_hex}", EngineYaml.SEPARATOR_CELL_HEX)
570
            .replace("${calibrator_sql}", EngineYaml.CALIBRATOR_SQL)
571
            .replace("${calibrator_raw}", EngineYaml.CALIBRATOR_SQL.repeat(100))
572
            .replace("${calibrator_hex}", EngineYaml.CALIBRATOR_HEX)
573
            .replace("${trail_sql}", EngineYaml.TRAIL_SQL)
574
            .replace("${trail_hex}", EngineYaml.TRAIL_HEX)
575
            .replace("${lead}", LEAD)
576
            .replace("${lead_hex}", EngineYaml.LEAD_HEX)
577
            .replace("${lead_pipe}", EngineYaml.LEAD_PIPE);
578
    }
579
580
    /**
581
     * Get payload with sliding window except for vulnerability report
582
     */
583
    private String getSlidingWindow(boolean isReport) {
584 2 1. getSlidingWindow : negated conditional → NO_COVERAGE
2. getSlidingWindow : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::getSlidingWindow → NO_COVERAGE
        return isReport
585
            ? "(" + EngineYaml.INJECTION + ")"
586
            : this.modelYaml.getStrategy().getConfiguration().getSlidingWindow();
587
    }
588
    
589
    
590
    // Getter and setter
591
592
    @Override
593
    public String sqlInfos() {
594 1 1. sqlInfos : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlInfos → NO_COVERAGE
        return this.modelYaml.getResource().getInfo();
595
    }
596
597
    @Override
598
    public List<String> getFalsyBit() {
599 1 1. getFalsyBit : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getFalsyBit → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTest().getFalsyBit();
600
    }
601
602
    @Override
603
    public List<String> getTruthyBit() {
604 1 1. getTruthyBit : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getTruthyBit → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTest().getTruthyBit();
605
    }
606
607
    @Override
608
    public List<String> getFalsyBin() {
609 1 1. getFalsyBin : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getFalsyBin → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTest().getFalsyBin();
610
    }
611
612
    @Override
613
    public List<String> getTruthyBin() {
614 1 1. getTruthyBin : replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getTruthyBin → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTest().getTruthyBin();
615
    }
616
617
    @Override
618
    public String sqlBlindConfirm() {
619 1 1. sqlBlindConfirm : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlindConfirm → NO_COVERAGE
        return this.modelYaml.getStrategy().getBinary().getTest().getInit();
620
    }
621
622
    @Override
623
    public String sqlOrderBy() {
624 1 1. sqlOrderBy : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlOrderBy → NO_COVERAGE
        return this.modelYaml.getStrategy().getUnion().getOrderBy();
625
    }
626
    
627
    @Override
628
    public String endingComment() {
629 1 1. endingComment : negated conditional → NO_COVERAGE
        if (this.injectionModel.getMediatorUtils().preferencesUtil().isUrlRandomSuffixDisabled()) {
630 1 1. endingComment : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::endingComment → NO_COVERAGE
            return this.modelYaml.getStrategy().getConfiguration().getEndingComment();
631
        } else {
632 1 1. endingComment : replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::endingComment → NO_COVERAGE
            return this.modelYaml.getStrategy().getConfiguration().getEndingComment()
633
                + RandomStringUtils.secure().nextAlphanumeric(4);  // Allows binary match fingerprinting on host errors
634
        }
635
    }
636
637
    @Override
638
    public ModelYaml getModelYaml() {
639 1 1. getModelYaml : replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::getModelYaml → KILLED
        return this.modelYaml;
640
    }
641
}

Mutations

114

1.1
Location : <init>
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
negated conditional → KILLED

117

1.1
Location : <init>
Killed by : none
removed call to com/jsql/model/injection/engine/model/EngineYaml::mergeMaps → SURVIVED
Covering tests

127

1.1
Location : mergeMaps
Killed by : none
negated conditional → SURVIVED
Covering tests

128

1.1
Location : mergeMaps
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
negated conditional → KILLED

129

1.1
Location : mergeMaps
Killed by : none
negated conditional → SURVIVED
Covering tests

131

1.1
Location : mergeMaps
Killed by : none
removed call to com/jsql/model/injection/engine/model/EngineYaml::mergeMaps → SURVIVED
Covering tests

133

1.1
Location : mergeMaps
Killed by : none
negated conditional → SURVIVED
Covering tests

146

1.1
Location : sqlDatabases
Killed by : none
negated conditional → NO_COVERAGE

147

1.1
Location : sqlDatabases
Killed by : none
negated conditional → NO_COVERAGE

153

1.1
Location : lambda$sqlDatabases$0
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlDatabases$0 → NO_COVERAGE

156

1.1
Location : sqlDatabases
Killed by : none
negated conditional → NO_COVERAGE

157

1.1
Location : sqlDatabases
Killed by : none
negated conditional → NO_COVERAGE

163

1.1
Location : lambda$sqlDatabases$1
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlDatabases$1 → NO_COVERAGE

167

1.1
Location : sqlDatabases
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlDatabases → NO_COVERAGE

174

1.1
Location : sqlTables
Killed by : none
negated conditional → NO_COVERAGE

175

1.1
Location : sqlTables
Killed by : none
negated conditional → NO_COVERAGE

181

1.1
Location : lambda$sqlTables$2
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlTables$2 → NO_COVERAGE

184

1.1
Location : sqlTables
Killed by : none
negated conditional → NO_COVERAGE

185

1.1
Location : sqlTables
Killed by : none
negated conditional → NO_COVERAGE

191

1.1
Location : lambda$sqlTables$3
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlTables$3 → NO_COVERAGE

197

1.1
Location : sqlTables
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTables → NO_COVERAGE

206

1.1
Location : sqlColumns
Killed by : none
negated conditional → NO_COVERAGE

207

1.1
Location : sqlColumns
Killed by : none
negated conditional → NO_COVERAGE

213

1.1
Location : lambda$sqlColumns$4
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlColumns$4 → NO_COVERAGE

216

1.1
Location : sqlColumns
Killed by : none
negated conditional → NO_COVERAGE

217

1.1
Location : sqlColumns
Killed by : none
negated conditional → NO_COVERAGE

223

1.1
Location : lambda$sqlColumns$5
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlColumns$5 → NO_COVERAGE

231

1.1
Location : sqlColumns
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlColumns → NO_COVERAGE

244

1.1
Location : sqlRows
Killed by : none
negated conditional → NO_COVERAGE

245

1.1
Location : sqlRows
Killed by : none
negated conditional → NO_COVERAGE

253

1.1
Location : lambda$sqlRows$6
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlRows$6 → NO_COVERAGE

256

1.1
Location : sqlRows
Killed by : none
negated conditional → NO_COVERAGE

257

1.1
Location : sqlRows
Killed by : none
negated conditional → NO_COVERAGE

265

1.1
Location : lambda$sqlRows$7
Killed by : none
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlRows$7 → NO_COVERAGE

274

1.1
Location : sqlRows
Killed by : none
negated conditional → NO_COVERAGE

280

1.1
Location : sqlRows
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : sqlRows
Killed by : none
negated conditional → NO_COVERAGE

291

1.1
Location : sqlRows
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlRows → NO_COVERAGE

307

1.1
Location : sqlTestBlindWithOperator
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTestBlindWithOperator → NO_COVERAGE

316

1.1
Location : sqlBlindBit
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlindBit → NO_COVERAGE

331

1.1
Location : sqlBlindBin
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlindBin → NO_COVERAGE

350

1.1
Location : sqlTestTimeWithOperator
Killed by : none
negated conditional → NO_COVERAGE

353

1.1
Location : sqlTestTimeWithOperator
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTestTimeWithOperator → NO_COVERAGE

363

1.1
Location : sqlTimeBit
Killed by : none
negated conditional → NO_COVERAGE

366

1.1
Location : sqlTimeBit
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTimeBit → NO_COVERAGE

391

1.1
Location : sqlBlind
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlind → NO_COVERAGE

401

1.1
Location : sqlTime
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlTime → NO_COVERAGE

411

1.1
Location : sqlMultibit
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlMultibit → NO_COVERAGE

419

1.1
Location : sqlErrorCalibrator
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlErrorCalibrator → NO_COVERAGE

431

1.1
Location : sqlErrorIndice
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlErrorIndice → NO_COVERAGE

442

1.1
Location : sqlError
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlError → NO_COVERAGE

461

1.1
Location : sqlUnion
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlUnion → NO_COVERAGE

481

1.1
Location : sqlDns
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlDns → NO_COVERAGE

483

1.1
Location : lambda$sqlDns$8
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::lambda$sqlDns$8 → NO_COVERAGE

488

1.1
Location : sqlStack
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlStack → NO_COVERAGE

503

1.1
Location : sqlCapacity
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlCapacity → NO_COVERAGE

518

1.1
Location : sqlIndices
Killed by : none
changed conditional boundary → NO_COVERAGE

2.2
Location : sqlIndices
Killed by : none
negated conditional → NO_COVERAGE

523

1.1
Location : sqlIndices
Killed by : none
Changed increment from -1 to 1 → NO_COVERAGE

524

1.1
Location : sqlIndices
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlIndices → NO_COVERAGE

545

1.1
Location : sqlLimit
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlLimit → NO_COVERAGE

547

1.1
Location : sqlLimit
Killed by : none
Replaced integer addition with subtraction → NO_COVERAGE

552

1.1
Location : fingerprintErrorsAsRegex
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::fingerprintErrorsAsRegex → NO_COVERAGE

556

1.1
Location : lambda$fingerprintErrorsAsRegex$9
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::lambda$fingerprintErrorsAsRegex$9 → NO_COVERAGE

563

1.1
Location : replaceTags
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::replaceTags → NO_COVERAGE

584

1.1
Location : getSlidingWindow
Killed by : none
negated conditional → NO_COVERAGE

2.2
Location : getSlidingWindow
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::getSlidingWindow → NO_COVERAGE

594

1.1
Location : sqlInfos
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlInfos → NO_COVERAGE

599

1.1
Location : getFalsyBit
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getFalsyBit → NO_COVERAGE

604

1.1
Location : getTruthyBit
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getTruthyBit → NO_COVERAGE

609

1.1
Location : getFalsyBin
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getFalsyBin → NO_COVERAGE

614

1.1
Location : getTruthyBin
Killed by : none
replaced return value with Collections.emptyList for com/jsql/model/injection/engine/model/EngineYaml::getTruthyBin → NO_COVERAGE

619

1.1
Location : sqlBlindConfirm
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlBlindConfirm → NO_COVERAGE

624

1.1
Location : sqlOrderBy
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::sqlOrderBy → NO_COVERAGE

629

1.1
Location : endingComment
Killed by : none
negated conditional → NO_COVERAGE

630

1.1
Location : endingComment
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::endingComment → NO_COVERAGE

632

1.1
Location : endingComment
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::endingComment → NO_COVERAGE

639

1.1
Location : getModelYaml
Killed by : ParameterUtilSpock.[engine:spock]/[spec:ParameterUtilSpock]/[feature:$spock_feature_0_1]
replaced return value with null for com/jsql/model/injection/engine/model/EngineYaml::getModelYaml → KILLED

Active mutators

Tests examined


Report generated by PIT 1.23.0