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

Mutations

116

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

123

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

134

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

135

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

136

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

138

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

140

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

153

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

154

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

160

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

163

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

164

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

170

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

174

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

181

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

182

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

188

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

191

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

192

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

198

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

204

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

213

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

214

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

220

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

223

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

224

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

230

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

238

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

251

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

252

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

260

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

263

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

264

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

272

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

281

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

287

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

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

298

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

314

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

323

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

338

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

357

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

360

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

370

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

373

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

398

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

408

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

418

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

426

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

438

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

449

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

468

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

488

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

490

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

495

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

510

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

525

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

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

530

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

531

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

552

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

554

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

559

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

563

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

570

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

591

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

601

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

606

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

611

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

616

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

621

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

626

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

631

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

636

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

637

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 : endingComment
Killed by : none
replaced return value with "" for com/jsql/model/injection/engine/model/EngineYaml::endingComment → NO_COVERAGE

646

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.25.5 support